2017-05-28 2 views
0

Ich verwende diese Funktion, um zu prüfen, ob ein bestimmter Handle in meiner Datenbank existiert. Es funktioniert in den meisten Fällen gut - wenn das Handle vorhanden ist, aktualisiert es die Tabellenansicht, um diesen Benutzer anzuzeigen. Wenn jedoch keine Übereinstimmung für das eingegebene Handle gefunden wird, wird meine Alert-Ansicht nicht angezeigt.Popup-Warnung wird nicht angezeigt, wenn keine Übereinstimmung in der Datenbank gefunden wird

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

habe ich die Warnung in der Schleife als:

if handle.lowercased() != handleToSearch { 
     self.noHandleFoundAlert() 
} 

Aber offensichtlich ist dies nicht der richtige Ansatz, da es nicht funktioniert. Wenn ich eine zufällige Zeichenfolge oder ein Handle, von dem ich weiß, dass es nicht verwendet wird, eingeben, wird die Warnung nicht angezeigt. Wo sonst würde ich die Warnung setzen, damit es angezeigt wird, wenn es keine Übereinstimmung gibt?

+0

Vor der Konvertierung des 'snapshot.value' zu ​​einem' Dictionary', überprüfen, ob es mit 'snapshot.exists exists() ': https://firebase.google.com/docs/reference/ios/firebasedatabase/api/reference/Classes/FIRDataSnapshot#-exists –

+0

Großartig, das hat es behoben. Ich setze einfach alles von 'wenn lastDict' in eine' if snapshot.exists() 'Bedingung mit dem' else', das 'noHandleFoundAlert' ist. Danke, und fühlen Sie sich frei, es als eine Antwort zu veröffentlichen, wenn Sie das Karma wollen! – KingTim

Antwort

0

Zuerst müssen Sie überprüfen, ob die Abfrage, die Sie vorgenommen haben, Daten enthält. So haben Sie eine

es gibt einen booleschen, also wenn Sie wahr ist, tun Sie die Schleife, sonst benachrichtigen Benutzer.

Verwandte Themen