2016-04-06 17 views
4

Ich versuche Benutzern zu erlauben, Spiele mit anderen Benutzern zu beginnen und ihnen zu folgen, indem sie ihren Benutzernamen suchen. Ich muss sicherstellen können, dass ein Benutzer mit diesem Benutzernamen existiert. Ich benutzte den folgenden Code, aber obwohl die if heißt else wird nicht aufgerufen, wenn es sollte.Swift & Firebase | Überprüfen, ob ein Benutzer mit einem Nutzernamen existiert

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
      .observeEventType(.ChildAdded, withBlock: { snapshot in 

    if snapshot.value.valueForKey("username")! as! String == username! { 

    } else { 

    } 

JSON Datenbaum

{ 
    "097ca4a4-563f-4867ghj0-6209288bd7f02" : { 
     "email" : "[email protected]", 
     "uid" : "097ca4a4-563f-4867ghj0-6209288bd7f02", 
     "username" : "test1", 
     "waiting" : "0" 
    }, 
    "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7" : { 
     "email" : "[email protected]", 
     "uid" : "55a8f979-ad0d-438u989u69-aa4a-45adb16175e7", 
     "username" : "test2", 
     "waiting" : "0" 
    } 
} 
+0

„aber obwohl das, wenn die sonst genannt wird, nicht aufgerufen werden, wenn ich will“ Was meinst du denn hier? – Khuong

+0

@ khuong291 Ich meine, dass die if-Anweisung "aktiviert" ist: 'if snapshot.value.valueForKey (" username ")! wie! String == Benutzername! {'Aber selbst wenn es die else-Anweisung niemals tun sollte. –

+0

Es ist korrekt, denn wenn die Aussage wahr ist, dann wird die Else-Anweisung niemals ausgeführt. – Khuong

Antwort

6

Einfache Lösung:

Verwenden .childAdded als Block nicht ausführen wird nicht, wenn die Abfrage nichts finden.

Statt .Wert verwenden und prüfen, ob NSNull

let checkWaitingRef = Firebase(url:"https://test.firebaseio.com/users") 
    checkWaitingRef.queryOrderedByChild("username").queryEqualToValue("\(username!)") 
       .observeEventType(.Value, withBlock: { snapshot in 

      if (snapshot.value is NSNull) { 
       print("not found)") 

      } else { 
       print(snapshot.value) 
      } 
    } 
+0

Ich habe diesen Ansatz getestet, aber die Callback-Funktion wird mehrmals aufgerufen. Also im Output-Abschnitt bekomme ich "nicht gefunden" und dann den Snapshot-Wert ... nicht sicher, wie man nur ein Ergebnis bekommt – franswa

+0

Sie haben etwas anderes falsch, da .value den gesamten Inhalt des Knotens liest, also nicht mehrmals aufgerufen werden - es sei denn, Sie ändern den Knoten. Sie könnten auch beobachtenSingleEventOfType. – Jay

+0

Ja, ich muss etwas falsch gemacht haben ... Ich habe meinen ganzen Abend damit verbracht, gestern damit fertig zu werden, aber jetzt scheint es zu funktionieren, wie du sagst – franswa

Verwandte Themen