【问题标题】:Firebase + Swift Deleting Rows in TableViewFirebase + Swift 删除 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 移出)。'

【问题讨论】:

    标签: ios firebase firebase-realtime-database


    【解决方案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】:

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

      【讨论】:

      • 你是怎么做到的!?
      猜你喜欢
      • 1970-01-01
      • 2020-05-27
      • 1970-01-01
      • 1970-01-01
      • 2019-05-24
      • 1970-01-01
      • 2017-11-29
      • 2018-10-26
      • 1970-01-01
      相关资源
      最近更新 更多