在Firebase上删除错误的ID

时间:2017-01-24 20:57:01

标签: swift firebase tableview

我试图从Firebase中删除某个项目,但我遇到了一个奇怪的问题。 这是功能:

     func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {

        //delete item from array
        itemArray.remove(at: indexPath.row)

        // delete from database
        var itemRef = FIRDatabaseReference()
        ref = FIRDatabase.database().reference()
        let userID = FIRAuth.auth()?.currentUser?.uid

        let idDel =  itemArray[indexPath.row].itemID
        itemRef = self.ref.child(userID!).child("ShoppingCart").child(idDel!)
        itemRef.removeValue()

        //delete row
        cartTable.deleteRows(at:[indexPath], with: .fade)


    }

}

问题在于,每次删除项目时,下一个项目都会在Firebase中删除,而不是我选择的项目。当我到达数组的末尾时,我得到错误“索引超出范围”。我猜这与索引路径/数组位置有关吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

在您获得要告知Firebase删除的ID之前,您似乎要从数组中删除该项目。因此,对于每个项目,在删除后重新索引数组时,实际上将获得数组中下一项的id。如果您尝试使用最后一项删除最后一项,则数组将更改为n - 1的大小,然后您将尝试读取位置n,从而导致超出范围错误。

在检索Firebase删除的ID后,尝试从数组中删除该项。

 
 func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
if editingStyle == .delete {

    // delete from database
    var itemRef = FIRDatabaseReference()
    ref = FIRDatabase.database().reference()
    let userID = FIRAuth.auth()?.currentUser?.uid

    let idDel =  itemArray[indexPath.row].itemID
    itemRef = self.ref.child(userID!).child("ShoppingCart").child(idDel!)
    itemRef.removeValue()

    //delete item from array
    itemArray.remove(at: indexPath.row)

    //delete row
    cartTable.deleteRows(at:[indexPath], with: .fade)


    }

}