FIRDatabaseReference alma
Veritabanından veri okumak veya yazmak için
FIRDatabaseReference
:
Swift
var ref: DatabaseReference! ref = Database.database().reference()
Objective-C
@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 öğesi olarak görünü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
// 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
// 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
_commentsRef.observe(.value) { snapshot in for child in snapshot.children { ... } }
Objective-C
[_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
// My top posts by number of stars let myTopPostsQuery = ref.child("user-posts").child(getUid()).queryOrdered(byChild: "starCount")
Objective-C
// 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 teknikleri kullanma tekniğine veri yayma adı verilir. Bu tekniğin kullanımı, 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ç içe yerleştirilmiş alt öğenin göreli yolunu
queryOrderedByChild
sesli arama.
Swift
let postsByMostPopular = ref.child("posts").queryOrdered(byChild: "metrics/views")
Objective-C
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
// 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
// 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
kullanabilirsiniz. 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.
- 32 bit tam sayı olarak ayrıştırılabilen bir anahtarı olan alt öğeler önce gelir ve artan düzende sıralanır.
- 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:
- Belirtilen alt anahtar için
nil
değerine sahip alt öğeler gelir tıklayın. - Belirtilen alt anahtar için
false
değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocukfalse
değerine sahipse anahtara göre sözlüksel olarak sıralanır. - Belirtilen alt anahtar için
true
değerine sahip alt öğeler bir sonraki adımımız var. Birden fazla çocuktrue
değerine sahipse anahtar kelimelere göre sıralanması. - 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.
- 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.
- 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 çağırma 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.