2017-05-28 13 views
0

私はこの機能を使用して、データベースに特定のハンドルが存在するかどうかを確認しています。ハンドルが存在する場合は、テーブルビューを更新してそのユーザーを表示します。しかし、入力されたハンドルに一致するものがない場合、私のアラートビューは表示されません。データベースに一致が見つからない場合にポップアップアラートが表示されない

// 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

がsnapshot.exists 'で存在する場合、チェック:

辞書にsnapshot.valueを変換する前に、それはsnapshot.exists()で存在するかどうかを確認':https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists –

+0

いいえ、これは修正されました。私はちょうど 'if snapDict'を' if snapshot.exists() 'の中に入れ、' else'は 'noHandleFoundAlert'です。ありがとう、あなたがカルマをしたい場合は答えとして投稿すること自由に感じる! – KingTim

答えて

0

まず、作成したクエリにデータがあるかどうかを確認する必要があります。だから、それはブール値を返します

.hasChild("handle") 

を持っているので、真であるときには、ループ、他のユーザーに通知を行います。

関連する問題