你当然得到了这个错误:
CoreData:错误:严重的应用程序错误。抓住了一个例外 在调用期间来自NSFetchedResultsController的委托 -controllerDidChangeContent :.无效更新:无效的节数。表视图中包含的节数 update(8)必须等于包含的节数 更新前的表视图(8),加号或减号 插入或删除的部分(插入1个,删除0个)。用户信息 (空)
此消息对我来说没有意义,因为CoreData与 NSFetchedResultsController 相关但是CoreData与表视图无关。 (如果我错了,请纠正我) 我理解它的方式,tableview和NSFetchedResultsController之间的唯一链接是在 NSFetchedResultsController&#39> 委托中,当我们使用 controller(didChangeObject:)和 controller( didChangeSection:)
如果使用 UITableView ,当iOS框架甚至不是强制性的(建议但不是强制性的)时,它们如何知道tableView的部分数量。 .. 它应该只能检查NSFetchedResultsController结果fetchedObjects结果数组,而不是在tableview中。
答案 0 :(得分:0)
通常,控制器的委托以下列方式实现(取自Apple的核心数据编程指南):
- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller
{
[[self tableView] endUpdates];
}
当tableView
获得endUpdates
消息时,它会在我们的上下文中执行两项重要操作:
计算自beginUpdates
以来插入和/或删除了多少部分(使用insertSections:withRowAnimation
方法)
检查这些更改是否反映在数据源中。在您的情况下,它们不是:通过在表视图上调用insertSections:withRowAnimation
插入了1个部分,但在询问部分计数时数据源仍然返回8。这基本上就是错误信息所说的内容。
因此表视图指出它的状态是不一致的,它会抛出异常。
我们仍然使用controllerDidChangeContent
委托方法。让我们再看一下错误消息:
从代表处获取了一个例外 NSFetchedResultsController在调用期间 -controllerDidChangeContent
因此NSFetchedResultsController
在controllerDidChangeContent
块内的代理上调用try
并捕获异常。然后它重新抛出它。
长话短说:NSFetchedResultsController
对表视图一无所知 - 它只是抓住了endUpdates
中UITableView
方法中抛出的异常。