Database 在Firebase中查询具有唯一UID的用户';使用Swift将s作为键
我试图通过小写名称查询用户,当用户注册时,我会自动保存该名称。问题是我正在为使用uid的用户创建密钥。现在,我很难让其他用户找到他们的朋友,因为我要收回的只是第一个键“user”。这是我的firebase信息。。。 这是我的密码Database 在Firebase中查询具有唯一UID的用户';使用Swift将s作为键,database,swift,firebase,Database,Swift,Firebase,我试图通过小写名称查询用户,当用户注册时,我会自动保存该名称。问题是我正在为使用uid的用户创建密钥。现在,我很难让其他用户找到他们的朋友,因为我要收回的只是第一个键“user”。这是我的firebase信息。。。 这是我的密码 let userRef = self.ref.childByAppendingPath("users") userRef.queryOrderedByChild("caseUsername") .queryStartingAtValue(self.sea
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?.lowercaseestring
查找用户。它应该等于user childcaseUsername
当您有一个查询时,可能有多个子项与该条件匹配。然后,当您侦听.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);
}
});
当您有一个查询时,可能有多个子项与该条件匹配。然后,当您侦听
.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);
}
});
感谢@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()
}
})
}
感谢@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()
}
})
}
您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,使我们能够轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。您的问题中包含了JSON树的图片。请将其替换为实际的JSON作为文本,您可以通过单击Firebase数据库中的导出按钮轻松获得该文本。将JSON作为文本使其具有可搜索性,允许我们轻松地使用它来测试您的实际数据,并在我们的答案中使用它,这通常是一件好事。