使用Swift使用唯一的UID作为键来查询Firebase中的用户

时间:2016-03-19 21:07:14

标签: database swift firebase

我正在尝试通过lowercaseString名称查询用户,我在用户注册时自动保存该名称。问题是我正在为使用他们的uid的用户创建密钥。现在我在让其他用户找到他们的朋友时遇到了麻烦,因为我所拉回来的只是第一个关键的“用户”。这是我的火力信息...... Firebase data of user with keys: caseUsername, displayName, follows, and image

这是我的代码......

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 个答案:

答案 0 :(得分:2)

感谢@Frank van 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 :(得分: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);
       }
   });