2016-03-19 42 views
0

我试图通过用户注册时自动保存的lowercaseString名称来查询用户。事情是我正在为使用他们的用户名的用户创建密钥。现在我无法让其他用户找到他们的朋友,因为我所有的人都是第一个关键的“用户”。这里是我的火力信息... Firebase data of user with keys: caseUsername, displayName, follows, and image使用Swift以唯一的UID作为密钥来查询Firebase中的用户

这里是我的代码...

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) 

请帮我用self.searchTXTFLD.text?.lowercaseString找到用户。它应该等于用户子女caseUsername

+2

您已经在您的问题中包含了JSON树的图片。请将实际的JSON替换为文本,您可以通过点击Firebase数据库中的导出按钮轻松获取该文本。将JSON作为文本可以搜索,使我们能够轻松使用它来测试您的实际数据,并将其用于我们的答案中,并且通常只是一件好事。 –

回答

2

由于@Frank面包车Puffelen。答案更多地体现了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将返回包含匹配子项列表的快照。即使只有一个匹配的孩子,它仍然会在列表中。

所以解决的办法是遍历匹配孩子:

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