私はこの機能を使用して、データベースに特定のハンドルが存在するかどうかを確認しています。ハンドルが存在する場合は、テーブルビューを更新してそのユーザーを表示します。しかし、入力されたハンドルに一致するものがない場合、私のアラートビューは表示されません。データベースに一致が見つからない場合にポップアップアラートが表示されない
// 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.exists 'で存在する場合、チェック:
辞書にsnapshot.valueを変換する前に、それは
snapshot.exists()
で存在するかどうかを確認':https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists –いいえ、これは修正されました。私はちょうど 'if snapDict'を' if snapshot.exists() 'の中に入れ、' else'は 'noHandleFoundAlert'です。ありがとう、あなたがカルマをしたい場合は答えとして投稿すること自由に感じる! – KingTim