2017-04-18 5 views
0

Ich versuche, Werte zu holen leben mit dieser Funktion:Swift ios Firebase Rückkehr keine Daten

handle = ref?.child("Users").child(String(itemId)).observe(.childChanged, with: { (snapShot) in 

         if let dictionary = snapShot.value as? [String: Any] { 
          print(dictionary) 
          if let profileImageUrl = dictionary["url"] as? String { 
           print(profileImageUrl) 
          } 
         } 
        }, withCancel: nil) 

ich meine app starten dann gehe ich auf meine Feuerbasis Konsole und einige Änderungen vornehmen, um das Kind, aber meine print() nie wird gefeuert.

Dies ist, wie meine DB wie folgt aussieht:

MyRootDb123 
-Users 
    --Id (Child of users) 
    --- url inside Id 
    --- name inside Id 
    --- age inside Id 

Auch in meinem Code, was bedeutet die withCancel Funktion tun?

DB-Struktur: enter image description here

aktualisieren Ich habe print(snapShot) die zurückgibt:

Snap (url) www.someurl.com 
+0

welche nicht 'print (dictionary)' 'feuern? –

+0

@NazmulHasan Niemand wird gefeuert, das gibt nie '', wenn Wörterbuch = snapShot.value als? [String: Any] {'' Ich denke, ich kann [String: Any] nicht verwenden – Kiow

+0

@NazmulHasan Ich habe 'print (snapShot)' hinzugefügt, was zurückgibt: Snap (url) www.someurl.com – Kiow

Antwort

0

Firebase Fall für den Knoten Schlüsselnamen empfindlich ist so Benutzer ist nicht das gleiche wie Benutzer und Ihr Code greift auf Benutzer zu, aber die Struktur ist Benutzer.

Code

handle = ref?.child("users") 

Struktur

MyRootDb123 
-Users 
    --Id (Child of users) 

aktualisieren zu zeigen, wie ein .childChanged Beobachter an den Benutzer Knoten befestigen und eine Änderung an einem Benutzer handhaben.

Beginnen wir mit einer grundlegenden Struktur Firebase

users 
    uid_0 
    name: "Leonard" 
    url: "www.leonard.com 
    uid_1 
    name: "Bill" 
    url: "www.bill.com" 

dann legen wir einen .childChanged Beobachter an den Benutzer Knoten starten. Wenn sich ein Kind im Benutzerknoten ändert, wird der geänderte Knoten an den Abschluss übergeben.

let usersRef = self.ref.child("users") 

usersRef.observe(.childChanged, with: { snapshot in 
    let userDict = snapshot.value as! [String: AnyObject] 
    let name = userDict["name"] as! String 
    let url = userDict["url"] as! String 
    print("\(name) now has url of: \(url)") 
}) 

Um dies zu testen, in der Firebase Konsole wir die URL Kind von uid_0 von www.leonard.com zu www.yipee.com ändern, wie diese

users 
    uid_0 
    name: "Leonard" 
    url: "www.yipee.com" //here's the new url 
    uid_1 
    name: "Bill" 
    url: "www.bill.com" 

Da die Änderung in uid_0 war , der Knoten, den es an die Schließung im obigen Code übergeben und wird drucken:

+0

Ich habe einen Tippfehler in meinem Beitrag gemacht. Mein Code scheint coz zu funktionieren, wenn ich '' print (snapShot) ''erhalte **" Snap (url) www.someurl.com "**, aber ich verstehe nicht, wie ich meinen Knoten für einen bestimmten Wert überprüfe. Die obige Ausgabe wurde gedruckt, als ich meinen "url" -Wert über die Konsole änderte – Kiow

+0

@Kiow Der Screenshot zeigt * Benutzer * und Ihr Code zeigt * Benutzer *. Es ist Groß-und Kleinschreibung und wird nicht mit diesem Fehler arbeiten. Beim Drucken (Schnappschuss) werden die Daten gedruckt, die von Firebase abgerufen wurden - da der Schnappschuss leer ist, wird nichts gedruckt. Der Code läuft, aber nicht * funktioniert *, da er aufgrund des Tippfehlers nichts von Firebase zurückbekommt. Korrigiere den Tippfehler in deinem Beitrag und deinem Code und wir werden uns das Problem noch einmal ansehen. – Jay

+0

Ich habe jetzt meinen Tippfehler – Kiow