Childadded检索一个密钥

时间:2017-08-29 12:13:02

标签: swift firebase firebase-realtime-database

向Firebase实时数据库添加新节点时遇到一些问题。当我添加一个孩子时,我得到了一些数据,但问题是我检索了密钥和1值,但总共有两个值。

我有以下结构:

-- groups 
    -- id
      -- members
        -- id
          --device_name
          --device_type

我观察成员的孩子。我想在添加该子元素时检索id和底层元素(device_name,device_type)。

我使用此代码执行此操作:

let ref = Database.database().reference().child("groups").child(roomObject.getAutoChildId()).child("members");
    ref.observe(.childAdded, with: { (snapshot) in
    print(snapshot.debugDescription)
})

但是现在出了问题。 snapshot.debugDescription不返回该快照中的所有值。例如:

Snap (ooDpijaPrKgcBA70LUXYbpohvi42) {
    "device_name" = test;
}

device_type键不存在,我不知道原因。我需要这个:

Snap (ooDpijaPrKgcBA70LUXYbpohvi42) {
    "device_name" = test;
    "device_type" = test;
}

添加了结构:

enter image description here

1 个答案:

答案 0 :(得分:2)

我发现了什么问题。它与.childAdded无关,该部分工作正常。

插入时出错了。我做的是以下内容:

let insertRef = reference.child("groups").child(roomKey).child("members").child(roomCodeArray[1])   
    insertRef.child("device_name").setValue(roomCodeArray[2])
    insertRef.child("device_type").setValue(roomCodeArray[3])

但是firebase的速度非常快,以至于插入device_name时,另一个设备会检索onchildChanged事件。此时不会添加设备类型。

我的解决方案:

let childInsert = [
                   "device_name" : roomCodeArray[2],
                   "device_type" : roomCodeArray[3]
                  ]

insertRef.setValue(childInsert)

同时插入值。然后它就像魔法一样。