我使用此功能检查我的数据库中是否存在某个句柄。它在大多数情况下工作正常 - 如果句柄存在,它会更新表视图以显示该用户。但是,如果输入的句柄不匹配,则我的警报视图不会显示。
// Search DB for matching handles
@IBAction func searchHandleButtonPressed(_ sender: Any) {
if let handleToSearch = handleSearchTextField.text?.lowercased() {
let databaseRef = FIRDatabase.database().reference()
databaseRef.child("users").queryOrdered(byChild: "lowercaseHandle").queryEqual(toValue: handleToSearch).observeSingleEvent(of: .value, with: { (snapshot) in
if let snapDict = snapshot.value as? [String:AnyObject] {
for each in snapDict{
let key = each.key
let handle = each.value["handle"] as! String
self.returnedHandles.removeAll()
self.returnedHandles.append(handle)
let pic = each.value["profilePicture"] as! String
self.returnedUsersProfilePic = pic
self.returnedUsersUID = key
if handle.lowercased() != handleToSearch {
self.noHandleFoundAlert()
}
if handle != "" {
DispatchQueue.main.async {
self.getFriendsInfo()
self.tableView.reloadData()
}
}
}
}
}, withCancel: {(Err) in
// print(Err.localizedDescription)
})
}
}
我将警报放在循环中:
if handle.lowercased() != handleToSearch {
self.noHandleFoundAlert()
}
但显然这不是正确的方法,因为它不起作用。如果我输入一个随机字符串,或者我知道不使用的句柄,警报就不会出现。我还会在哪里发出警报,以便在没有匹配时显示警告?
答案 0 :(得分:1)
快照将使用您当前的代码转换为空字典。
在将snapshot.value转换为字典之前,请检查它是否与snapshot.exists()
存在:https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists
答案 1 :(得分:0)
首先,您必须检查您所做的查询是否包含数据。所以你有一个
.hasChild("handle")
它返回一个布尔值,所以当为真时你做循环,否则通知用户。