使用NSFetchedResultsController崩溃的TableView行删除?

时间:2017-05-13 07:27:24

标签: uitableview nsfetchedresultscontroller

我正在尝试让用户从使用UITableView填充的NSFetchedResultsController中删除一行,但仍然会收到致命错误:

  

由于未捕获的异常而终止应用   'NSInternalInconsistencyException',原因:'无效更新:无效   第1节中的行数。包含在中的行数   更新后的现有部分(7)必须等于数量   更新前的该部分中包含的行(7),加号或减号   从该部分插入或删除的行数(插入0,   删除1)加上或减去移入或移出的行数   该部分(0移入,0移出)。'

我正在删除核心数据条目,然后在我的代码中删除tableView中的行但仍然出现上述错误:

func tableView(_ tableView: UITableView, commit editingStyle: UITableViewCellEditingStyle, forRowAt indexPath: IndexPath) {
    if editingStyle == .delete {
        self.feedTable.beginUpdates()
        let event = self.fetchedResultsController.object(at: indexPath) as Event
        self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))
        do {
            try self.managedObjectContext.save()
        } catch {}
        self.feedTable.deleteRows(at: [indexPath], with: .automatic)
        self.feedTable.endUpdates()
    }
}

任何人都可以帮助理解我做错了吗?

1 个答案:

答案 0 :(得分:0)

如果使用获取的结果控制器。仅使用

删除对象
self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))

试试这个解决方案

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

        let event = self.fetchedResultsController.object(at: indexPath) as Event
        self.managedObjectContext.delete(self.fetchedResultsController.object(at: indexPath))
        do {
            try self.managedObjectContext.save()
        } catch {}

    }
}

您不需要beginUpdatesendUpdates