FireView + Swift删除TableView中的行

时间:2016-09-24 09:02:30

标签: ios firebase firebase-realtime-database

好的,我正在按照本教程(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节中的行数。包含在中的行数   更新后的现有部分(8)必须等于数量   更新前的该部分中包含的行(8),加号或减号   从该部分插入或删除的行数(插入0,   删除1)加上或减去移入或移出的行数   该部分(0移入,0移出)。'

2 个答案:

答案 0 :(得分:1)

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

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

对我来说就是这样。您必须捕获该行的用户密钥。 我有一个像你的数组(mileageDatabase = teste),但我的变量存储在sublcass(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和行表格视图中删除数据。你可以在Firebase: delete item from row (Swift 3)

看到我的问题,我可以在哪里弄清楚如何解决这个问题

答案 1 :(得分:0)

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