2016-03-19 6 views
0

ユーザがサインアップするときに自動的に保存するlowercaseStringの名前でユーザを照会しようとしています。私は自分のuidを使ってユーザーのためのキーを作成しています。今私が取り戻しているのは、まさに最初のキー "ユーザー"だから、他のユーザーに自分の友達を見つけさせるのは難しいです。ここに私のfirebaseの情報が... Firebase data of user with keys: caseUsername, displayName, follows, and imageSwiftを使用してユニークなUIDをキーとしてFirebaseのユーザに問い合わせ

だ。ここに私のコードは私がself.searchTXTFLD.text?.lowercaseStringを使用してユーザーを見つける助けてください...

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) 

です。それはユーザーの子と同じにする必要がありますcaseUsername

+2

質問にはJSONツリーの図が含まれています。 Firebaseデータベースの[Export]ボタンをクリックすると、実際のJSONをテキストとして置き換えてください。 JSONをテキストとして検索可能にすることで、実際のデータを使ってテストしたり、答えに使用したりすることができます。一般的には、これは良いことです。 –

答えて

2

感謝。その答えは、Firebaseのデータをどのように構造化すべきかを明らかにしました。私はあなたの答えを完全には使用しませんでしたが、ここに私が持っているものと何が効いているのです。

@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

クエリを実行すると、条件に一致する子が複数存在することがあります。 .Valueイベントをリッスンすると、Firebaseは一致する子のリストを含むスナップショットを返します。一致する子が1つしかない場合でも、それはまだリストにあります。

だから、解決策は、一致する子供たちを反復することです:@FrankバンPuffelenへ

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