如何在一个事务中使用Swift删除Firebase中的多个路径

时间:2018-08-29 17:01:38

标签: swift database firebase firebase-realtime-database

我想从Firebase中删除存在于多个路径中的元素。

在一次交易中完成此操作的最佳做​​法是什么?

我搜索了,只有我能找到的东西是,例如:

let dictionary = [ path1 : nil,
                   path2 : nil ]

DatabaseReference.updateChilds(dictionary)

此外,使用NSNull()代替nill也不起作用

但这会引发异常,因为我无法使用更新方法来删除子级。

我们将不胜感激。

编辑:

我得到的异常:

***由于未捕获的异常'NSInternalInconsistencyException'而终止应用程序,原因:'无效更新:第0节中的项目数无效。更新(1)后现有节中包含的项目数必须等于更新前该部分中包含的项目数(1),加上或减去从该部分中插入或删除的项目数(已插入0,已删除1),以及正负移动到该部分或从该部分移出的项目数( 0移入,0移出)。

单击按钮后,该对象将被删除,并激活连接到此功能的序列:

@IBAction func unwindFromDeleteSegue(segue: UIStoryboardSegue)
    {

        if (prodToLoad != nil)
        {
            for  cell in ProductsCollection.visibleCells as! [ProductsCollectionViewCell]
            {
                if ( cell.productUniqueID == prodToLoad?.UniqueID())
                {
                    let indexPath = self.ProductsCollection.indexPath(for: cell)
                    _ = self.ProductsCollection.numberOfItems(inSection: 0)
                    ProductsCollection.deleteItems(at: [indexPath!]) 
                }
            }
        }

        ProductsCollection.reloadData()
    }

编辑:

物品现在可以从集合中正确删除了,但仍然没有从Firebase中删除...

1 个答案:

答案 0 :(得分:0)

看起来您看到的异常是由于成功删除了子代而导致的。如果您有某种类型的参考观察者正在填充您的集合视图,请确保您正在更新数据源以反映已删除的子代。