Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/94.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/18.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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 在swift firebase中添加新子级后填充数组_Ios_Swift_Firebase_Firebase Realtime Database - Fatal编程技术网

Ios 在swift firebase中添加新子级后填充数组

Ios 在swift firebase中添加新子级后填充数组,ios,swift,firebase,firebase-realtime-database,Ios,Swift,Firebase,Firebase Realtime Database,这是填充“耗材”数组(在我的viewDidLoad中调用)的代码: /-------------------------填充消耗品阵列--------------------------------// 私有函数populateConsumableArray(){ //让对象填充自己。 self.ref?.child(“耗材”).observe(.childAdded,带有:{snapshot in 让dataChange=snapshot.value为?[字符串:AnyObject] 让aRe

这是填充“耗材”数组(在我的viewDidLoad中调用)的代码:

/-------------------------填充消耗品阵列--------------------------------//
私有函数populateConsumableArray(){
//让对象填充自己。
self.ref?.child(“耗材”).observe(.childAdded,带有:{snapshot in
让dataChange=snapshot.value为?[字符串:AnyObject]
让aRequest=消耗品(aDict:dataChange!)
self.consumableArray.append(aRequest)
self.consumableTable.reloadData()
})
}
消耗品对象类如下所示

公共级消耗品{
私有变量类型:String
私有变量计数:字符串
私有变量sku:String
init(aDict:[字符串:AnyObject]){
self.type=aDict[“type”]as!字符串
self.count=aDict[“count”]作为!字符串
self.sku=aDict[“sku”]作为!字符串
}
数据很好地填充了我的表视图…下面是代码工作的图片。。。

正如上面两幅图所示,代码加载数据很好……数组填充也很好,没有显示,因为它与问题没有直接关系。 下面是数据库结构的图片:

现在,当通过我的添加功能添加新耗材时,添加的子项仅获取添加到耗材项的第一个属性。(也不包括在内,因为我确信这可以正常工作,因为它会在线填充firebase数据库,我将显示该数据库)

第一个属性是“Type”,我改变了事物添加到firebase的顺序,首先添加了“Count”,最后Count是唯一抓取的属性。我的意思见下图

添加测试耗材:

现在您可以看到,“Type”是唯一被抓取并存储在dataChange字典中的属性,而不是“Type”、“Count”和“Sku”。

这就是我的firebase数据库在上述断点处的外观,因此我知道耗材正在添加到firebase中,这只是在将新的子项添加到“耗材”父项时获取耗材的问题:

当然,由于“Count”和“Sku”不在传递的字典中,因此故障发生在我的易耗对象init函数中。有关故障,请参阅以下内容:

如果我关闭并重新加载应用程序,表视图将加载所有数据,甚至是我之前添加的导致应用程序崩溃的数据。因此,我的问题是,为什么我的populateConsumableArray函数不能获取“耗材”父级的所有子级

为了方便起见,我将在下面添加addConsumableToFirebase()函数,以防出于某种原因出现问题。。。

在我开始之前,请以文本而不是图片的形式发布代码,这样我们就可以在需要时复制并粘贴它…(你大部分都是这样做的,但问题确实出现在你发布的最后一张图片lol中)

现在,查看Firebase文档如下所示:

说:

写入的效果将立即可见,相应的事件将被触发。数据与Firebase数据库服务器的同步也将启动

这就是为什么您看到它仅使用
类型
即可立即调用的原因

请尝试提供的同时更新多个值的功能:

func updateChildValues(_ values: [AnyHashable : Any])
编辑:
删除了一个关于可能导致保留周期的部分,因为您没有弱捕获self,但正如注释中指出的,它不适用于此处。

只是一个简短的说明。Firebase数据库闭包没有转义,也不需要使用弱。此外,在这个问题中,self没有保留对闭包的引用,如
self.closure=此_closure
.self.ref是对Firebase路径的引用,而不是对closure本身的引用。Firebase文档显示了的功能结构。啊,这就是为什么我说可能,没有完整的上下文/也不知道Firebase是如何工作的-我将编辑,谢谢您的澄清