2016-03-19 14 views
0

kullanarak anahtar olarak sorgulama Kullanıcıları, bir kullanıcı kaydolduğunda otomatik olarak kaydettiğim küçük harfli String adına göre sorgulamaya çalışıyorum. Sorun şu ki, kullanıcılarını kullanan kullanıcılar için anahtarlar oluşturuyorum. Şimdi diğer kullanıcıların arkadaşlarını bulmalarına izin vermekte zorlanıyorum çünkü geri çekdiğim tek şey ilk "kullanıcı" anahtarıdır. İşte benim Firebase bilgi ... İşte Firebase data of user with keys: caseUsername, displayName, follows, and imageFirebase'deki kullanıcıları tek bir UID'sini Swift

benim kodu ...

let userRef = self.ref.childByAppendingPath("users") 
userRef.queryOrderedByChild("caseUsername") 
     .queryStartingAtValue(self.searchTXTFLD.text?.lowercaseString, childKey: "caseUsername") 
     .observeEventType(.Value, withBlock: { (snapshot) -> Void in 
      print(snapshot.key) 

beni self.searchTXTFLD.text?.lowercaseString kullanarak kullanıcıları bulmama yardım et bu. caseUsername kullanıcı çocuğuna eşit olmalıdır.

+2

Sorunuza JSON ağacının bir resmini dahil ettiniz. Lütfen Firebase veritabanınızdaki Dışa Aktar düğmesini tıklayarak kolayca alabileceğiniz metin olarak gerçek JSON ile değiştirin. JSON'un metne dönüştürülmesini sağlamak, onu gerçek verilerinizle test etmek ve cevabımızda kullanmak için genel olarak kullanmamıza izin verir ve genel olarak yapılması gereken sadece iyi bir şeydir. –

cevap

2

teşekkürler. Yanıt, Firebase verilerinin nasıl yapılandırılacağı hakkında daha fazla bilgi verdi. Cevabınızı tam olarak kullanmadım, ama sahip olduğum ve neyin işe yaradığı.

@IBAction func searchFriendsACTN(sender: AnyObject) 
     { 
      let queryRef = self.ref.childByAppendingPath("users") 
      queryRef.queryOrderedByChild("caseUsername") 
       .queryEqualToValue(self.searchTXTFLD.text?.lowercaseString) 
       .queryLimitedToFirst(1) 
       .observeEventType(.Value, withBlock: { snapshot in 
        if snapshot.exists() 
        { 
         var newIds = [String]() 
         var newNames = [String]() 
         var newCsnames = [String]() 
         var newPics = [String]() 
         for items in snapshot.value as! NSDictionary 
         { 
          let ids = items.key 
          let names = items.value["displayName"] as! String 
          let csnames = items.value["caseUsername"] as! String 
          let pics = items.value["image"] as! NSString 

          newIds.append(ids as! String) 
          newNames.append(names) 
          newCsnames.append(csnames) 
          newPics.append(pics as String) 
         } 
         self.caseUserNameArray = newCsnames 
         self.usersID = newIds 
         self.usernameArray = newNames 
         self.photos = newPics 
         self.friendsTBLVW.reloadData() 
        } 
       }) 
     } 
1

Sorgunuz olduğunda, koşula uyan çok sayıda çocuk olabilir. Ardından, .Value olayını dinlediğinizde, Firebase eşleşen çocukların listesini içeren bir anlık görüntüyü döndürür. Sadece eşleşen bir çocuk olsa bile, yine de listede olacak.

Yani çözüm eşleşen çocukları üzerinde yineleme şudur: @Frank van Puffelen için

ref.queryOrderedByChild("caseUsername") 
    .queryStartingAtValue(self.searchTXTFLD.text?.lowercaseString, childKey: "caseUsername") 
    .observeEventType(.Value, withBlock: { snapshot in 
     for child in snapshot.children { 
      print(child.key); 
     } 
    });