Firebase + Swift 删除 TableView 中的行

Posted

技术标签:

【中文标题】Firebase + Swift 删除 TableView 中的行【英文标题】:Firebase + Swift Deleting Rows in TableView 【发布时间】:2016-09-24 09:02:29 【问题描述】:

好的,我正在按照本教程 (https://www.raywenderlich.com/139322/firebase-tutorial-getting-started-2) 使用 Firebase 删除 tableView 中的行,但它似乎不起作用。我的代码如下:

override func viewDidLoad() 
    super.viewDidLoad()
    configureDatabase() 


func configureDatabase() 
    self.ref = FIRDatabase.database().reference()
    if let user = FIRAuth.auth()?.currentUser 
        self.ref.child("mileage").queryOrderedByChild("user").queryEqualToValue(user.uid).observeEventType(.ChildAdded, withBlock:  (snapshot) in
            self.mileageDatabase.insert(snapshot, atIndex: 0)
            self.tableView.insertRowsAtIndexPaths([NSIndexPath(forRow: 0, inSection: 0)], withRowAnimation: .Automatic)

        )


     else 

    



override func tableView(tableView: UITableView, commitEditingStyle editingStyle: UITableViewCellEditingStyle, forRowAtIndexPath indexPath: NSIndexPath) 
    if (editingStyle == UITableViewCellEditingStyle.Delete) 
        let row = self.mileageDatabase[indexPath.row]
        row.ref.removeValue()
        self.tableView.deleteRowsAtIndexPaths([NSIndexPath(forRow: indexPath.row, inSection: 0)], withRowAnimation: .Automatic)

    

它抛出错误:

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

【问题讨论】:

【参考方案1】:

我认为这里row.ref.removeValue() 有一个错误。您正在将 Array 与 Firebase 数据混合。如果你只写:

mileageDatabase.remove[indexPath.row] tableview.reloadData()

对我来说就是这样工作的。您必须捕获该行的用户密钥。 我有一个像你一样的数组(mileageDatabase = teste),但我的变量存储在子类(ChkList)内的结构中。我就是这样做的。

override func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) 

if editingStyle == .delete 

        let user: ChkList = teste[indexPath.row]
        let uk = user.key
        print("Userkey: \(uk)")
        ref.child(uk!).removeValue()


这样,您将从 Firebase 和行表单 tableview 中删除数据。你可以看到我在哪里可以解决这个问题:Firebase: delete item from row (Swift 3)

【讨论】:

【参考方案2】:

数据源仍保存您删除其单元格的对象。在删除单元格时,您必须从数据源中删除该对象。

【讨论】:

你是怎么做到的!?

以上是关于Firebase + Swift 删除 TableView 中的行的主要内容,如果未能解决你的问题,请参考以下文章

Firebase + Swift:无法删除 tableView 中的行

Swift,FIrebase - 无法通过 removeAllObservers 删除观察者

如何使用 Swift 从 UITableViewCell 中删除 Firebase 中的特定子节点

如何从特定的 UICollectionViewCell 中删除 firebase 子节点 - Swift

如何使用 Swift 删除 Firebase 上超过 30 分钟的数据? [复制]

如何通过swift3在firebase中24小时内删除数据