2016-06-10 61 views
0

我有一个节点,我试图获取该值的关键字。节点看起来是这样的:获取关键值但不是Firebase的根值

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

我试图检索和了解“user1_user2”和“user1_user3”并举使用.Value.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' 
}) 

当我使用.ChildAdded,它只返回一个值

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 

我怎样才能获得 “user1_user2” 和 “user1_user3”(所有roomnames)使用.Value.ChildAdded单个查询?


编辑:

假设我有一个这样的节点:

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

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

我怎样才能获得时间戳键和他们的价值观?

+0

使用你添加的'.Value'代码有什么问题? – Shubhank

+0

在'.Value'中,'snapshot.value'返回整个对象为'[“user1_user2”:[“user1”:true,“user2”],“user1_user3”:[“user1”:true,“user2” ]]',我无法弄清楚如何获取房间名称。另外,我认为我不应该为'.Value'使用'observeEventType',因为它不会停止观察。不过,我想我应该分别处理'.ChildAdded'和'.ChildChanged'。那是错的吗? – senty

+1

使用'snapshot.value.allKeys()'获取所有房间名称 –

回答

1

要获得所有房间名称...你必须得到allKeys

snapshot.value.allKeys() 

这会给你["user1_user2","user1_user3"]即你roomnames。

+0

我有关于同一主题的另一个问题。我在我的问题的底部添加了一个编辑。你能解释一下吗?有没有使用节点级别的向上和向下的方法?谢谢 – senty

+0

上下意味着......你的意思是说根和孩子? –

+0

是的,没错。在这个例子中,我使用了'snap.value.allValues',它给了我[时间戳:[“key”:“value”]。如果我使用'snap.value.allKeys',它会给我房间名称级别。 – senty

相关问题