2016-07-28 7 views
1

Ich versuche, einen Firebase-Benutzernamen zu UserDefault zu speichern. Hier ist, was ich habe:Unerwarteterweise gefunden Null nach Überprüfung auf Null

let databaseRef = FIRDatabase.database().reference() 
databaseRef.child("Users").child((FIRAuth.auth()?.currentUser?.uid)!).observe(.value, with: { (snapshot) in 
    print("log in 4") 
    print(snapshot.value) 
    if snapshot.value != nil { 
     print("log in 4.1") 
     UserDefaults.standard.set(snapshot.value!["username"], forKey: "username")//Crash probably occurs here 
     print("log in 4.2") 
    } 

}) 

Das System druckt log in 4 und log in 4.1, aber nicht 4.2. Der Fehler muss auf der dazwischen liegenden Zeile auftreten. Ich überprüfe, dass snapshot.value nicht Null ist, aber es druckt immer noch Null. Wie kann ich das beheben? Vielen Dank!

+5

'snapshot.value [„username“]' wird null zurück, wenn kein Wert für die ist 'Benutzername' Schlüssel im Wörterbuch. Sie sollten lernen, den Debugger und Einzelschritt zu verwenden, anstatt sich auf Protokollanweisungen zu verlassen. – Paulw11

+0

@ Paulw11 Warum hast du das nicht als Antwort gepostet? – Losiowaty

+1

Es ist vielleicht nicht die Antwort (OK, ist es wahrscheinlich), aber ich bevorzuge es, dem Fragesteller eine Gelegenheit zu geben, in Kommentaren zu bestätigen, bevor Sie eine Antwort schreiben – Paulw11

Antwort

0

derzeit Du bist gerade nur, dass snapshot.value enthält jede Wert, ist so nicht nil. Aber das heißt nicht, dass snapshot.value den Wert "username" enthält.

Wenn es leer initialisiert ist, ist es auch nicht Null.

So für diesen speziellen Schlüssel überprüfen Sie für den Schlüssel einen Scheck hinzufügen, müsste sich:

if let userValue = snapshot.value?["username"] 
0

Sie Bindung optional verwenden sollten Sie den Wert auszupacken erhalten möchten ...

if let username = snapshot.value?["username"] { 
    // now you can use username safely 
}