Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 使用UpdateChildValue从Firebase中删除_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 使用UpdateChildValue从Firebase中删除

Ios 使用UpdateChildValue从Firebase中删除,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,我正在尝试同时删除Firebase数据库中多个位置的数据 国家: “删除数据的最简单方法是在对该数据位置的引用上调用removeValue。您也可以通过指定nil作为另一个写入操作(如setValue或updateChildValues)的值来删除。您可以将此技术与updateChildValues一起使用,在一个API调用中删除多个子项。” 我的代码是 let childUpdates = [path1 : nil, path2 : nil,

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

国家:

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

我的代码是

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

    ref.updateChildValues(childUpdates)
所有四条路径都是字符串,但我得到一个错误:

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

我假设出现这种情况是因为nil值,因为如果我用其他任何东西(比如Int)替换nil,错误就会消失


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

我认为此错误来自您提供的第一行。您需要指定字典的类型。所以把它改成

let childUpdates: [String : AnyObject?] = [path1: nil, path2: nil,...]

所以这里的问题是

ref.updateChildValues(childUpdates)
需要[String:AnyObject!]参数来更新ChildValues和AnyObject!不能为nil(即不能使用AnyObject?这是一个可选选项,可以为nil)

但是,您可以这样做

let childUpdates = [path1 : NSNull(),
                    path2 : NSNull(),
                    path3 : NSNull(),
                    path4 : NSNull()]
因为任何东西!现在是一个NSNull()对象(不是nil),Firebase知道NSNull是一个nil值

编辑

您可以在此基础上展开,也可以进行多位置更新。假设你有一个结构

items
   item_0
      item_name: "some item 0"
   item_1
      item_name: "some item 1"
您需要更新两个项目名称。这是swift代码

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"

不幸的是,它不起作用。字典的预期类型为[NSObject:AnyObject]。如果字典不是那种类型,updateChildValues函数将给出一个错误。我们已尝试更改NSObjects的路径,但它仍然会抱怨AnyObject?上的nil值?。看起来我们无法输入nil值,但他们在文档中说我们可以,所以可能有一种方法我们还没有找到。我认为如果使用空字符串
Firebase将删除它。试试看。它只是将路径上的值更改为空字符串。然后我认为您应该沿着removeValue路径,而不是尝试执行您正在执行的操作。您节省了我的时间非常感谢!这肯定需要放在Firebase文档中,太令人沮丧了!正如他们所说,我认为方法应该是
updateChildValues(values:[AnyHashable:Any?])
以允许
nil
。谢谢你的邀请!!!我从@Jay那里找到了答案