如何删除tableview,coredata,firebase数据库中的数据,删除顺序?

时间:2018-05-07 15:25:45

标签: ios swift firebase core-data firebase-realtime-database

我正在使用存储数据的表视图,我将这些数据上传到firebase中,然后将它们保存在coredata中

我想在表格视图中删除一行,这里是代码:

let x = tableViewUsers![indexPath.row].permUser!
refDelete.child(emailReceived).child("Permission").child(x).removeValue()

self.tableViewUsers?.remove(at: indexPath.row)

self.TrackMeTable.deleteRows(at: [indexPath], with: .fade)

//self.TrackMeTable.reloadData()

DataController.deletePermUser(emailAddress: tableViewUsers![indexPath.row])

这些行代码的正确顺序是什么,因为当我在索引超出范围的第一行代码中第二次删除时出现错误

2 个答案:

答案 0 :(得分:0)

删除项目并更改项目项目后,这就是为什么删除行时迟早会出现错误,因为索引将超出范围。我建议你删除行后,更新tableview。 self.TrackMeTable.reloadData()

答案 1 :(得分:0)

发生错误是因为

之后
self.tableViewUsers?.remove(at: indexPath.row)

此特定索引路径上的项目不再存在,如果它是最后一项,则indexPath.row的下一次调用会引发超出范围的异常。

除了问题之外,将tableViewUsers声明为非可选项以消除所有感叹号和问号

要解决此问题,请在将用户从阵列中删除之前保留对用户的引用

let x = tableViewUsers[indexPath.row].permUser!
refDelete.child(emailReceived).child("Permission").child(x).removeValue()
let user = tableViewUsers[indexPath.row]
self.tableViewUsers.remove(at: indexPath.row)
self.TrackMeTable.deleteRows(at: [indexPath], with: .fade)
DataController.deletePermUser(emailAddress: user)