gpt4 book ai didi

swift - Firebase 添加子项时,另一个子项被删除

转载 作者:行者123 更新时间:2023-11-30 10:35:28 24 4
gpt4 key购买 nike

我正在尝试向名为“users_want_notification”的子项添加一个子项。这似乎有效,但是当我尝试使用不同的名称将第二个子项添加到名为“users_want_notification”的子项时,第一个子项将被删除。我怎样才能改变这个,这样第一个 child 就不会被删除?

我的代码:

Database.database().reference()
.child("Notification").child("users").child(username)
.setValue(["username": username, "url": Foto_url])
Database.database().reference()
.child("Notification").child("users").child(username)
.child("users_want_notification").child(Pro_user)
.setValue(["Pro_user": Pro_user, "toDeviceID": AppDelegate.DEVICEID])

Firebase:

Firebase

最佳答案

当您在子节点上调用 setValue 时,该节点下的所有现有数据都将替换为您传递给 setValue 的值。如果我们查看您的第一次通话:

Database.database().reference()
.child("Notification").child("users").child(username)
.setValue(["username": username, "url": Foto_url])

这将替换 /Notification/users/$username 下的所有现有数据,包括其 users_want_notification 子节点下的所有数据。由于您随后在 users_want_notification 下添加了一个新的子节点,因此看起来该调用会替换现有的子节点,但实际上它是第一个 setValue 删除所有数据。您可以通过暂时注释掉第二个调用来测试这一点,您会看到整个 users_want_notification 消失了。

您有两个主要选择:

  1. 对各个 usernameurl 属性使用单独的 setValue 调用:

    let userRef = Database.database().reference()
    .child("Notification").child("users").child(username)
    userRef.child("username").setValue(username)
    userRef.child("url").setValue(Foto_url])
    userRef.child("users_want_notification").child(Pro_user)
    .setValue(["Pro_user": Pro_user, "toDeviceID": AppDelegate.DEVICEID])

    由于所有 setValue 调用现在都发生在低于 /Notification/users/$username 的级别,因此整个节点永远不会被替换。

  2. 对所有数据使用单个 updateChildNodes 调用,执行 multi-location update (docs)。

关于swift - Firebase 添加子项时,另一个子项被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58149114/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com