swift - Childadded 检索一个 key

标签 swift firebase firebase-realtime-database

我在向 Firebase 实时数据库添加新节点时遇到了一些问题。添加 child 时我得到了一些数据,但问题是我检索了键和 1 个值,但总共有 2 个值。

我有以下结构:

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

我观察成员的 child 。我想在添加该子项时检索 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

最佳答案

我已经找到问题所在了。它与 .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)

同时插入值。然后它就像变魔术一样发挥作用。

关于swift - Childadded 检索一个 key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45938871/

相关文章:

ios - FirebaseTableViewDataSource 在用户注销和登录时崩溃

java - Firebase 检查用户名是否存在

android - 如何在保留父 firebase 的同时删除子节点

swift - AWS iOS 开发工具包 : Using both S3 and Mobile Analytics in two different regions

android - Firebase/Android - 经常失去数据库连接

python-3.x - 使用 firebase-admin sdk 和用户电子邮件从 firebase 中删除用户

Swift 和 Firebase | .timestamp() 的精确度如何,我可以用它作为标识吗?

ios - 展开/压缩 UICollectionView 中的所有 UICollectionView 单元格

ios - 从给定值的字典中删除键

swift - 在ios swift4中通过纬度和经度创建 map 图像