2016-09-22 17 views
7

Temel olarak, Title, Description ve Published bayrağını içeren bir yapı var (açıklama için aşağıdaki ekran görüntüsüne bakın). uygulamasında Firebase verilerini Swift'de filtreleme?

Topics object in Firebase Database

, ben verilere filtre ve sadece published = true sahip konuları göstermek istiyorum.

self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics") 
     self.ref?.queryEqualToValue("published") 
     self.ref?.observeEventType(.Value, withBlock: { (snapshot) in 
      //...Handle Snapshot here 
     }) 

Ama bu olmuyor:

Bu benim yapmaya çalıştığım şey bu. Buna nasıl yaklaşmalıyım? Yardım için şimdiden teşekkür ederiz.

cevap

16

Orada birkaç küçük hatalarınız var. çok kötü bir şey Genel olarak, ancak kombine işe asla: Eğer değeri üzerinde filtreleme yapabilirsiniz önce query... yöntemlerden herhangi çağırarak

  1. Eğer orderByChild() gereken yeni bir nesne döndürür Eğer döngü gerekir
  2. sonuçlar üzerinde

bu birleştiren:

let ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics") 
let query = ref.queryOrderedByChild("published").queryEqualToValue(true) 
query.observeEventType(.Value, withBlock: { (snapshot) in 
    for childSnapshot in snapshot.children { 
     print(childSnapshot) 
    } 
}) 

Bu soruyu düzenli olarak alıyoruz. Örneğin, bu dün çok benzer görünüyor: Firebase Query not Executing Properly. Açıklamam her türlü cevaba göre değiştiğinden, tıklayana kadar relevant answers'u okumak için biraz göz atmanızı öneririz.

+0

Frank için tekrar teşekkürler! –

+0

Verilerin bir kez daha derinlemesine yerleştirilmesi hâlâ mümkün mü? Örneğin, "yayınlanan" altında, doğru/yanlış değerlere sahip bir anahtar listesi vardı. Ve filtrelemek istediniz '/ broadcast/key1 = true' Bu, karşılaştığım problem. –

+0

Bunu denedim, ancak tüm çocuk değerlerini alıyorum, yalnızca sorgu ölçütlerini geçenleri değil. .childAdded ve queryStarting kullanıyorum (at :). Herhangi bir işaretçi için şimdiden teşekkür ederiz. – Septronic

0
self.ref = FIRDatabase.database().referenceFromURL(FIREBASE_URL).child("topics"). 
    queryOrderedByChild("published").queryEqualToValue(true) 
    .observeEventType(.Value, withBlock: { (snapshot) in 
    for childSnapshot in snapshot.children { 
     print(snapshot) 
    } 
})