Apple platformlarında Veri Listeleri ile çalışma

FIRDatabaseReference alma

Veritabanından veri okumak veya yazmak için FIRDatabaseReference:

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
var ref: DatabaseReference!

ref = Database.database().reference()

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
@property (strong, nonatomic) FIRDatabaseReference *ref;

self.ref = [[FIRDatabase database] reference];

Okuma ve yazma listeleri

Veri listesine ekle

Çok kullanıcılı bir listeye veri eklemek için childByAutoId yöntemini kullanın izin verir. childByAutoId yöntemi, yeni bir anahtar oluşturulmasını her seferinde benzersiz bir anahtar alt öğesi, belirtilen Firebase referansına eklenir. Bu araçları kullanarak her yeni öğe için otomatik olarak oluşturulan anahtarlara sahip olduğundan, bazı müşteriler çocuklara yazma çakışmaları olmadan aynı anda aynı konuma yönlendiren bir uygulamadır. İlgili içeriği oluşturmak için kullanılan childByAutoId tarafından oluşturulan benzersiz anahtar, bir zaman damgasına dayanır. Bu nedenle, kronolojik olarak otomatik olarak sıralanır.

childByAutoId yöntemi tarafından döndürülen yeni verilere yapılan referansı kullanabilirsiniz alt yayıncının otomatik olarak oluşturulan anahtarın değerini alma veya çocuk için verileri ayarlama. childByAutoId referansı için getKey çağrısı yapıldığında otomatik olarak oluşturulan anahtar döndürülür.

Verilerinizi birleştirmeyi kolaylaştırmak için otomatik olarak oluşturulan bu anahtarları kullanabilirsiniz inceleyeceğiz. Daha fazla bilgi için veri yayma işlemini inceleyin example) arayın.

Çocuk etkinliklerini dinle

Alt etkinlikler, Bir işlemdeki düğümün alt öğeleridir (ör. childByAutoId yöntemi veya updateChildValues yöntemini çağırın.

Etkinlik türü Tipik kullanım
FIRDataEventTypeChildAdded Öğe listelerini alın veya öğe listesine yapılan eklemeleri dinleyin. Bu etkinlik, mevcut her alt öğe için bir kez, ardından tekrar tetiklenir. belirtilen yola her yeni alt öğe eklendiğinde. Dinleyici yeni alt yayıncının verilerini içeren bir anlık görüntü iletildi.
FIRDataEventTypeChildChanged Listedeki öğelerde yapılan değişiklikleri bekleyin. Bu etkinlik, bir alt düğüm her değiştirildiğinde tetiklenir. Bu, alt düğümün alt öğeleridir. Etkinlik işleyiciye iletilen anlık görüntü alt öğe için güncellenmiş verileri içerir.
FIRDataEventTypeChildRemoved Bir listeden kaldırılan öğeleri bekleyin. Bu etkinlik şu durumda tetiklenir: hemen bir alt öğe kaldırılır.Geri çağırma bloğuna geçirilen anlık görüntü Kaldırılan alt yayıncının verilerini içerir.
FIRDataEventTypeChildMoved Sıralı listedeki öğelerin sırasındaki değişiklikleri bekleyin. Bir güncelleme, alt öğe olarak ayarlanır. queryOrderedByChild veya queryOrderedByValue bazında sıralanan verilerle kullanılır.

Bunların her biri birlikte belirli bir modeldeki değişiklikleri dinlemek için düğümünü anlatacağım. Örneğin, bir sosyal blog uygulaması bu yöntemleri kullanabilir aşağıdaki gibi bir gönderinin yorumlarındaki etkinliği izlemek için aşağıdaki adımları uygulayın:

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// Listen for new comments in the Firebase database
commentsRef.observe(.childAdded, with: { (snapshot) -> Void in
  self.comments.append(snapshot)
  self.tableView.insertRows(
    at: [IndexPath(row: self.comments.count - 1, section: self.kSectionComments)],
    with: UITableView.RowAnimation.automatic
  )
})
// Listen for deleted comments in the Firebase database
commentsRef.observe(.childRemoved, with: { (snapshot) -> Void in
  let index = self.indexOfMessage(snapshot)
  self.comments.remove(at: index)
  self.tableView.deleteRows(
    at: [IndexPath(row: index, section: self.kSectionComments)],
    with: UITableView.RowAnimation.automatic
  )
})

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// Listen for new comments in the Firebase database
[_commentsRef
              observeEventType:FIRDataEventTypeChildAdded
              withBlock:^(FIRDataSnapshot *snapshot) {
                [self.comments addObject:snapshot];
                [self.tableView insertRowsAtIndexPaths:@[
                  [NSIndexPath indexPathForRow:self.comments.count - 1 inSection:kSectionComments]
                ]
                                      withRowAnimation:UITableViewRowAnimationAutomatic];
              }];
// Listen for deleted comments in the Firebase database
[_commentsRef
 observeEventType:FIRDataEventTypeChildRemoved
 withBlock:^(FIRDataSnapshot *snapshot) {
   int index = [self indexOfMessage:snapshot];
   [self.comments removeObjectAtIndex:index];
   [self.tableView deleteRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:index inSection:kSectionComments]]
                         withRowAnimation:UITableViewRowAnimationAutomatic];
 }];

Değer etkinliklerine göz atın

Veri listelerini okumak için önerilen yöntem alt etkinlikleri dinlemek olsa da bir liste referansındaki değer etkinliklerini dinlemenin kullanışlı olduğu durumlar vardır.

Veri listesine bir FIRDataEventTypeValue gözlemleyicisi eklendiğinde veri listesinin tamamını tek bir DataSnapshot olarak ayarlayın. Daha sonra çocuklara bireysel olarak erişebilir.

Sorgu için tek bir eşleşme olsa bile anlık görüntü yine de listele: tek bir öğe içeriyor. Öğeye erişmek için döngü oluşturmanız gerekir şu sonucun üzerinde:

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
_commentsRef.observe(.value) { snapshot in
  for child in snapshot.children {
    ...
  }
}

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
[_commentsRef
              observeEventType:FIRDataEventTypeValue
              withBlock:^(FIRDataSnapshot *snapshot) {
                // Loop over children
                NSEnumerator *children = [snapshot children];
                FIRDataSnapshot *child;
                while (child = [children nextObject]) {
                  // ...
                }
              }];

Bu kalıp, bir listenin tüm alt öğelerini getirmek istediğinizde yararlı olabilir ek alt öğeleri dinlemek yerine tek bir işlemle etkinlikler.

Verileri sıralama ve filtreleme

Verileri sıralanmış şekilde almak için Realtime Database FIRDatabaseQuery sınıfını kullanabilirsiniz anahtara, değere veya bir alt öğe değerine göre. Mevcut içeriklerinize göre sıralanmış sonucu belirli sayıda sonuç veya anahtar aralığı ya da değerler.

Verileri sırala

Sıralanmış verileri almak için öncelikle sıralamaya göre yöntemlerden birini belirterek sonuçların nasıl sıralandığını belirler:

Yöntem Kullanım
queryOrderedByKey Sonuçları alt anahtarlara göre sıralayın.
queryOrderedByValue Sonuçları alt değerlere göre sıralayın.
queryOrderedByChild Sonuçları, belirtilen bir alt anahtarın veya iç içe yerleştirilmiş alt yolun değerine göre sıralayın.

Aynı anda yalnızca bir sıralama yöntemi kullanabilirsiniz. Tek tek sıralama yöntemini çağırma işlemi birden çok kez tekrarlanırsa hata verir.

Aşağıdaki örnek, bir kullanıcının en popüler yayınlar yıldız sayısına göre sıralandı:

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// My top posts by number of stars
let myTopPostsQuery = ref.child("user-posts").child(getUid()).queryOrdered(byChild: "starCount")

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// My top posts by number of stars
FIRDatabaseQuery *myTopPostsQuery = [[[self.ref child:@"user-posts"]
                                      child:[super getUid]]
                                     queryOrderedByChild:@"starCount"];

Bu sorgu, kullanıcının yayınlarını kullanıcı kimlikleri, her yayının aldığı yıldız sayısına göre sıralanır. Bu olarak bilinen "veri yayma" tekniğine veri yayma adı verilen bir tekniktir. daha fazla bilgiye ulaşabilirsiniz. Veritabanınızı Yapılandırma.

queryOrderedByChild yöntemine yapılan çağrı, sipariş edilecek alt anahtarı belirtir yardımcı olabilir. Bu örnekte yayınlar, yayınınızın değerine göre, Her yayında "starCount" çocuk var. Sorgular, iç içe yerleştirilmiş ya da çocuklarınız (örneğin, aşağıdaki gibi görünen verileriniz varsa):

"posts": {
  "ts-functions": {
    "metrics": {
      "views" : 1200000,
      "likes" : 251000,
      "shares": 1200,
    },
    "title" : "Why you should use TypeScript for writing Cloud Functions",
    "author": "Doug",
  },
  "android-arch-3": {
    "metrics": {
      "views" : 900000,
      "likes" : 117000,
      "shares": 144,
    },
    "title" : "Using Android Architecture Components with Firebase Realtime Database (Part 3)",
    "author": "Doug",
  }
},

Bu örnekte, liste öğelerimizi metrics anahtarı için, iç içe yerleştirilmiş alt öğenin göreli yolunu queryOrderedByChild sesli arama.

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
 
let postsByMostPopular = ref.child("posts").queryOrdered(byChild: "metrics/views")

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
 
FIRDatabaseQuery *postsByMostPopular = [[ref child:@"posts"] queryOrderedByChild:@"metrics/views"];

Diğer veri türlerinin nasıl sıralandığı hakkında daha fazla bilgi için Sorgu verileri nasıl sıralanır? bölümüne bakın.

Veri filtreleme

Verileri filtrelemek için sınır veya aralık yöntemlerinden herhangi birini, yönteme göre sırala.

Yöntem Kullanım
queryLimitedToFirst Döndürülecek maksimum öğe sayısını sıralı sonuç listesi.
queryLimitedToLast Siparişin sonundan itibaren iade edilecek maksimum öğe sayısını ayarlar sonuç listesi.
queryStartingAtValue Belirtilen anahtar veya değerden büyük veya ona eşit olan öğeleri döndürün, seçilen yönteme göre değişir.
queryStartingAfterValue Belirtilen anahtar veya değerden büyük öğeleri döndürür, seçilen yönteme göre değişir.
queryEndingAtValue Belirtilen anahtar veya değerden düşük ya da ona eşit olan öğeleri döndür, seçilen yönteme göre değişir.
queryEndingBeforeValue Belirtilen anahtar veya değerden düşük olan öğeleri döndürür, seçilen yönteme göre değişir.
queryEqualToValue Şuna bağlı olarak, belirtilen anahtar veya değere eşit olan öğeleri döndürün: seçilen yönteme göre değişir.

Sıralama ölçütü yöntemlerinden farklı olarak birden çok sınırlama veya aralık işlevini birleştirebilirsiniz. Örneğin, kullanıcı sayısını sınırlandırmak için queryStartingAtValue ve queryEndingAtValue yöntemlerini birleştirebilirsiniz. sonuçları belirli bir değer aralığına göre ayarlar.

Sonuç sayısını sınırlandırın

Şu değeri ayarlamak için queryLimitedToFirst ve queryLimitedToLast yöntemlerini kullanabilirsiniz: belirli bir geri çağırma için senkronize edilecek maksimum alt öğe sayısı. Örneğin, 100'lük bir sınır belirlemek için queryLimitedToFirst kullanıyorsanız başlangıçta yalnızca 100 FIRDataEventTypeChildAdded geri çağırma. Hesabınızda depoladığınız öğe sayısı 100'den azsa Firebase veritabanını kullanıyorsanız her öğe için bir FIRDataEventTypeChildAdded geri çağırması tetiklenir.

Öğeler değiştikçe şuna giren öğeler için FIRDataEventTypeChildAdded geri çağırma alırsınız: ve FIRDataEventTypeChildRemoved geri çağırmasına olanak tanır. Böylece, toplam sayı 100'de kalıyor.

Aşağıdaki örnek, örnek bir blog uygulamasının Tüm kullanıcılar tarafından paylaşılan en son 100 yayının listesi:

Swift

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// Last 100 posts, these are automatically the 100 most recent
// due to sorting by push() keys
let recentPostsQuery = (ref?.child("posts").queryLimited(toFirst: 100))!

Objective-C

Not: Bu Firebase ürünü, App Clip hedefinde kullanılamaz.
// Last 100 posts, these are automatically the 100 most recent
// due to sorting by push() keys
FIRDatabaseQuery *recentPostsQuery = [[self.ref child:@"posts"] queryLimitedToFirst:100];

Anahtar veya değere göre filtreleyin

queryStartingAtValue, queryStartingAfterValue, queryEndingAtValue, queryEndingBeforeValue ve queryEqualToValue kullanarak sorgular için rastgele başlangıç, bitiş ve denklik noktaları seçebilirsiniz. Bu verileri sayfalara ayırmak veya belirli bir içeriği olan çocukların bulunduğu öğeleri bulmak için belirli bir değer.

Sorgu verileri nasıl sıralanır?

Bu bölümde, verilerin her bir yönteme göre nasıl sıralandığı açıklanmaktadır. FIRDatabaseQuery sınıf.

queryOrderedByKey

Verilerinizi sıralamak için queryOrderedByKey kullandığınızda veriler artan düzende döndürülür anahtara göre.

  1. 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
  2. Anahtarlarında dize değeri olan alt öğeler sıradaki sırayla, sözlüksel olarak artan düzende sıralanır.

queryOrderedByValue

queryOrderedByValue kullanılırken alt öğeler değerlerine göre sıralanır. Sıralama ölçütleri, queryOrderedByChild ile aynıdır. Tek fark, düğümün değerinin belirtilen bir alt anahtarın değeri yerine kullanılır.

queryOrderedByChild

queryOrderedByChild kullanılırken belirtilen alt anahtarı içeren veriler şu şekilde sıralanmıştır:

  1. Belirtilen alt anahtar için nil değerine sahip alt öğeler gelir tıklayın.
  2. Belirtilen alt anahtar için false değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk false değerine sahipse anahtara göre sözlüksel olarak sıralanır.
  3. Belirtilen alt anahtar için true değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuk true değerine sahipse anahtar kelimelere göre sıralanması.
  4. Sayısal değere sahip olan alt öğeler artan düzende sıralanır. Eğer birden fazla alt öğe, belirtilen alt öğe için aynı sayısal değere sahip anahtara göre sıralanırlar.
  5. Dizeler sayılardan sonra gelir ve sözlüksel olarak artan düzende sıralanır. sipariş. Belirtilen alt öğe için aynı değere sahip birden fazla alt öğe varsa bu terimler sözlüksel olarak anahtara göre sıralanır.
  6. Nesneler son sırada gelir ve anahtara göre sözlüksel olarak artan düzende sıralanır.

Dinleyicileri ayır

Bir sunucudan çıktığınızda gözlemciler veri senkronizasyonunu otomatik olarak ViewController Bir gözlemci düzgün şekilde kaldırılmazsa senkronizasyona devam eder. verileri yerel belleğe kaydeder ve etkinlik işleyicide yakalanan nesneleri tutar bu da bellek sızıntılarına neden olabilir. Gözlemciye ihtiyaç kalmadığında öğesini, ilişkili FIRDatabaseHandle öğesini removeObserverWithHandle yöntemini çağırın.

Bir referansa geri arama bloğu eklediğinizde FIRDatabaseHandle döndürülür. Bu herkese açık kullanıcı adları, geri çağırma engellemesini kaldırmak için kullanılabilir.

Veritabanı referansına birden fazla işleyici eklenmişse her işleyici bir etkinlik oluşturulduğunda çağrılır. O konumdaki verileri senkronize etmeyi durdurmak için, removeAllObservers işlevini çağırarak bir konumdaki tüm gözlemcileri kaldırmanız gerekir yöntemidir.

Bir dinleyiciden removeObserverWithHandle veya removeAllObservers çağrısı yapıldığında: alt düğümlerine kayıtlı işleyicileri otomatik olarak kaldırmamalıdır; şunları da yapmalısınız: bu referansları veya herkese açık kullanıcı adlarını takip etmeniz gerekir.

Sonraki adımlar