【问题标题】:Childadded retrieves one keyChildadded 检索一个键
【发布时间】:2017-08-29 12:13:02
【问题描述】:

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

我有以下结构:

-- 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;
}

添加结构:

【问题讨论】:

  • 你能显示你的firebase数据库的截图吗?
  • @3stud1ant3 我已经添加了截图。
  • 如果只添加 print(snapshot) 那么输出是什么?
  • 我想我知道出了什么问题,我将device_name和device_type一一插入。我认为这与时机有关。所以我打算批量做。
  • 我已经找到并添加了解决方案,感谢您的帮助@3stud1ant3

标签: swift firebase firebase-realtime-database


【解决方案1】:

我发现出了什么问题。它与 .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)

同时插入值。然后它就像魔术一样工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2018-10-11
    • 1970-01-01
    • 2013-05-13
    • 1970-01-01
    • 2017-01-07
    • 2021-08-04
    相关资源
    最近更新 更多