簡體   English   中英

Firebase + Swift 刪除 TableView 中的行

[英]Firebase + Swift Deleting Rows in TableView

好的,我正在按照本教程( 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 移出).'

我認為這里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)

數據源仍然保存您刪除其單元格的對象。 在刪除單元格時,您必須從數據源中刪除該對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM