我正在使用此函數來檢查數據庫中是否存在某個句柄。它大部分工作正常 - 如果句柄存在,它會更新表視圖以顯示該用戶。但是,如果沒有匹配輸入的句柄,我的警報視圖不會顯示。當在數據庫中找不到匹配時彈出警報不顯示
// 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()
}
但很明顯,這不是正確的做法,因爲它不工作。如果我輸入一個隨機字符串,或者我知道的一個句柄沒有被使用,警告就不會出現。如果沒有匹配,我會在哪裏放置警報以便顯示出來?
的'snapshot.value'轉換爲'Dictionary'之前,檢查它是否與'snapshot.exists存在() ':https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists –
太好了,這個問題解決了。我只是把'if let snapDict'放在'if snapshot.exists()'的情況下,而'else'是'noHandleFoundAlert'。謝謝,如果你想要業力,隨時發佈它作爲答案! – KingTim