2016-06-10 1 views
0

Ich habe einen Knoten, den ich versuche, den Schlüssel des Werts zu erhalten. Der Knoten sieht wie folgt aus:Schlüsselwert, aber nicht den Root-Wert von Firebase

roomMembers 
- "user1_user2" (roomname) 
    - user1: true 
    - user2: true 
- "user1_user3" 
    - user1: true 
    - user2: true 

Ich versuche, „user1_user2“ und „user1_user3“ durch beide abrufen und wissen mit .Value und .ChildAdded.

let membersRef = Firebase(url: self.dataURL + "/roomMembers") 

membersRef.queryOrderedByChild("user1").observeSingleEventOfType(.Value, withBlock: { snapshot in 

    snapshot.value // returns the objects as `[String: [String:Bool]]` 
    snapshot.key  // returns 'roomMembers' 
}) 

Wenn ich .ChildAdded verwenden, es gibt nur einen Wert

membersRef.queryOrderedByChild("user1").observeEventOfType(.ChildAdded, withBlock: { snapshot in 

    snapshot.key  // returns the right level, but only returns "user1_user2". 
    snapshot.value // also returns only one value 

Wie kann ich "user1_user2" und "user1_user3" (alle roomnames) mit einer einzigen Abfrage mit .Value und .ChildAdded bekommen?


Edit:

Angenommen, ich habe einen Knoten wie folgt aus:

lastMessages 
    - "user1_user2" 
    - -KJrqHaMzA9Hi-RS_ieV  (timestamp'ed id) 
     - sender 
     - message 
     - opponent_seen 

    - "user1_user3" 
    - -KJrqHaMzA9Hi-RS_ieB 
     - sender 
     - message 
     - opponent_seen 

Wie kann ich timestamped Schlüssel und ihre Werte zu erhalten?

+0

Was ist das Problem bei der Verwendung von '.Value' Code, den Sie hinzugefügt haben? – Shubhank

+0

In '.Value' gibt' snapshot.value' das gesamte Objekt als '[" user1_user2 ": [" user1 ": true," user2 "]," user1_user3 "zurück: [" user1 ": true," user2 " ]] ', und ich konnte nicht herausfinden, wie man nur die Zimmernamen bekommt. Außerdem denke ich, ich sollte 'observeEventType' nicht für' .Value' verwenden, da es nicht aufhört zu beobachten. Ich denke jedoch, dass ich ".ChildAdded" und ".ChildChanged" getrennt behandeln sollte. Ist das falsch? – senty

+1

Verwenden Sie 'snapshot.value.allKeys()', um alle Raumnamen zu erhalten –

Antwort

1

alle Raumnamen zu bekommen ... Sie haben AllKeys wie

snapshot.value.allKeys() 

Dies wird Ihnen ["user1_user2","user1_user3"] d.h Ihre roomnames zu bekommen.

+0

Ich habe eine andere Frage zum gleichen Thema. Ich habe am Ende meiner Frage eine Bearbeitung hinzugefügt. Kannst du das bitte auch erklären? Gibt es eine Möglichkeit, die Knotenebenen auf und ab zu benutzen? Danke – senty

+0

rauf und runter bedeutet ... du willst sagen root und child ???? –

+0

Ja, das stimmt. In diesem Beispiel habe ich 'snap.value.allValues' verwendet und es gibt mir [timestamps: [" key ":" value "]. Wenn ich 'snap.value.allKeys' verwende, gibt es mir Raumnamen. – senty