向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;
}
添加了结构:
答案 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)
同时插入值。然后它就像魔法一样。