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