使用 UpdateChildValues 从 Firebase 中删除

2024-02-17

我正在尝试同时从 Firebase 数据库中的多个位置删除数据。

The Firebase 文档 https://firebase.google.com/docs/database/ios/save-data state:

“删除数据的最简单方法是在对该数据位置的引用上调用removeValue。您还可以通过将 nil 指定为另一个写入操作(例如 setValue 或 updateChildValues)的值来删除数据。您可以将此技术与 updateChildValues 结合使用来删除一次 API 调用中有多个子项。”

我的代码是

let childUpdates = [path1 : nil,
                    path2 : nil,
                    path3 : nil,
                    path4 : nil]

    ref.updateChildValues(childUpdates)

所有四个路径都是字符串,但我收到错误:

“如果没有更多上下文,表达类型就不明确。”

我假设这是因为 nil 值而发生的,因为如果我用其他值(例如 Int)替换 nil ,错误就会消失。

使用 updateChildValues 从 Firebase 删除数据的正确方法是什么?我们希望它的工作方式与 Firebase 中的 removeValue() 函数类似。我们更愿意这样做的原因是因为它可以在一次调用中从多个位置删除。


所以这里的问题是

ref.updateChildValues(childUpdates)

updateChildValues 需要一个 [String: AnyObject!] 参数,而 AnyObject!不能是 nil (即你不能使用 AnyObject?这是一个可能是 nil 的可选值)

但是,您可以这样做

let childUpdates = [path1 : NSNull(),
                    path2 : NSNull(),
                    path3 : NSNull(),
                    path4 : NSNull()]

因为任何对象!现在是一个 NSNull() 对象(不是 nil),并且 Firebase 知道 NSNull 是一个 nil 值。

Edit

您可以对此进行扩展以进行多位置更新。假设你有一个结构

items
   item_0
      item_name: "some item 0"
   item_1
      item_name: "some item 1"

并且您想要更新两个项目名称。这是快速代码。

func updateMultipleValues() {
    let path0 = "items/item_0/item_name"
    let path1 = "items/item_1/item_name"

    let childUpdates = [ path0: "Hello",
                         path1: "World"
    ]

    self.ref.updateChildValues(childUpdates) //self.ref points to my firebase
}

结果是

items
   item_0
      item_name: "Hello"
   item_1
      item_name: "World"
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 UpdateChildValues 从 Firebase 中删除 的相关文章

随机推荐