我正在尝试通过lowercaseString名称查询用户,我在用户注册时自动保存该名称。问题是我正在为使用他们的uid的用户创建密钥。现在我在让其他用户找到他们的朋友时遇到了麻烦,因为我所拉回来的只是第一个关键的“用户”。这是我的火力信息......
这是我的代码......
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
。
答案 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);
}
});