删除行时很少发生的 Tableview 错误 - 核心数据和 FetchedResultsController

Posted

技术标签:

【中文标题】删除行时很少发生的 Tableview 错误 - 核心数据和 FetchedResultsController【英文标题】:Tableview error when row is deleted that occurs extremely rarely - Core Data and FetchedResultsController 【发布时间】:2018-09-02 15:55:35 【问题描述】:

我正在使用一个由 NSFetchedResultsController 填充的表格视图。该表显示列表。列表实体与任务具有一对多关系。然后是一个笔记实体,它与任务具有一对一的关系。在介绍了笔记实体和与任务的关系后,我得到了这个断言错误

错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数 (3),加上或减去数字从该部分插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。与用户信息(空) CoreData:错误:严重的应用程序错误。在核心数据更改处理期间捕获到异常。这通常是 NSManagedObjectContextObjectsDidChangeNotification 观察者中的一个错误。无效更新:第 0 节中的行数无效。更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数 (3),加上或减去数字从该部分插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。与用户信息(空) 2018-09-02 12:41:37.856931+0500 List24[26505:860491] * 由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。行数更新后包含在现有节中的行数 (1) 必须等于更新前该节中包含的行数 (3),加上或减去从该节插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0移入,0移出)。 * 首先抛出调用栈:

这个错误以前从未发生过。然而,它真的很少。只发生了两次,但我不知道是什么原因造成的。

笔记与任务一一对应。删除是在列表和任务之间级联的。因此,如果我删除列表,它应该删除任务并且也应该删除笔记。

我可以做的任何建议或提示来尝试一劳永逸地修复它。谢谢!

【问题讨论】:

当数据源在删除之前没有正确更新时,通常会发生此错误。根据日志,它说您的数据源减少了 2,但只删除了 1 行。可能只是检查您修改数据源的逻辑。 我正在使用 FRC,只是从核心数据中删除了相应的对象。行的删除由“contentdidchange”方法处理。还有一件事,当我在 controllerwillchange 和 controllerdidchange 方法中使用 beginupdates() 和 endupdates() 时,不会出现滑动删除按钮。现在怎么了? 【参考方案1】:

无效更新:第 0 节中的行数无效。

更新后现有节中包含的行数 (1) 必须等于更新前该节中包含的行数 (3),加上或减去从该节中插入或删除的行数(0 插入,1 删除)加上或减去移入或移出该部分的行数(0 移入,0 移出)。

这似乎是UITableView(我猜是ios)的要求,如果您使用.beginUpdates().endUpdates(),那么您应该调用tableView.deletedRows(..) & co对应于您从numberOfRows(..) 返回的内容。

【讨论】:

以上是关于删除行时很少发生的 Tableview 错误 - 核心数据和 FetchedResultsController的主要内容,如果未能解决你的问题,请参考以下文章

从 tableview 删除行时崩溃

iOS Swift 2 - 删除 tableView 行时出错

从 TableView 中删除项目时 AppDelegate 错误

删除 UITableView 中的行时出错

如何在 C# 中删除 TableView 中的行时从右到左单元格设置动画

编辑行时 TableView 节标题移动