好的,我正在按照本教程(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移出)。'
答案 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)
数据源仍保留您删除其单元格的对象。删除单元格时,必须从数据源中删除该对象。