2016-10-29 5 views
0

Ich entwickle eine kleine Anwendung in iOS mit Swift und Firebase. Ich habe Probleme, Daten abzufragen und den Wert abzurufen. Meine Feuerbasis Echtzeit-Datenbank ist dies:Firebase queryEqualToValue get Schlüssel in Swift 2.3

"qrcode" : { 
    "postsedation_room" : "http://bing.com", 
    "preprocedure_room" : "http://google.com", 
    "presedation_room" : "http://en.m.wikipedia.org" 
} 

Ich möchte diese Abfrage machen:

let query = rootRef.child("qrcode").queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
    print(snapshot) 
}) 

Druck ein Schlüsselwert "postsedation_room". An diesem Punkt ist das Ergebnis des Druckens Snap (qrcode) <null> Könnten Sie mir helfen, damit ich Schlüssel den Kindwert geben kann?

+0

@ EICaptainv2.0 wie würde ich über die Änderung meinen Code gehe dieses null Problem zu beheben ? –

Antwort

0

Wenn Sie eine Abfrage für die Firebase-Datenbank ausführen, werden möglicherweise mehrere Ergebnisse angezeigt. Wenn Sie also einen Wertbeobachter anhängen, enthält der Snapshot eine Liste dieser Ergebnisse. Selbst wenn nur ein Ergebnis vorhanden ist, enthält der Snapshot eine Liste mit einem Ergebnis.

Also in Ihrem Beobachter müssen Sie diese Liste behandeln. Der einfachste Weg, dies zu tun ist, darüber iterieren:

let query = rootRef.child("qrcode").queryOrderedByValue().queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.Value, withBlock: { snapshot in 
    for child in snapshot.children { 
     print(child.key) 
    } 
}) 

Alternativ können Sie einen einzelnen childAdded eventl beobachten

let query = rootRef.child("qrcode").queryEqualToValue("http://bing.com") 

query.observeSingleEventOfType(.ChildAdded, withBlock: { snapshot in 
    print(snapshot.key) 
}) 
+0

Ich habe beide Wege versucht, in beiden Fällen gab es null zurück ... hast du noch andere Vorschläge? –

+0

Danke! Es funktionierte! –