2016-06-10 58 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

相關問題