【发布时间】:2012-08-12 13:02:05
【问题描述】:
我在使用带有 Core Data 的 TableView 时遇到了崩溃问题,非常感谢任何帮助。场景是:
我有一个 UITableViewController 显示存储在核心数据中的数据。我使用 NSFetchResultsController 按照文档的指示进行提取。我有一个专用的 NSManagedObjectContext 专用于主线程来获取数据。
数据实际上来自服务器。当我的应用程序启动时,我有一个后台线程来将数据刷新到我的核心数据堆栈中。根据 Apple 的建议,我在后台线程中使用不同的 NSManagedObjectContext 来刷新数据。在刷新期间,旧数据将被删除。
后台保存更改后,我使用 NSManagedObjectContextDidSaveNotification 触发调用,在主线程的上下文中执行 mergeChangesFromContextDidSaveNotification。
还实现了FRC的controllerDidChangeContent,调用UITableViewController重新加载。
一切正常 - 除非我在数据刷新过程中滚动 TableView,否则应用程序将因“Core Data 无法完成故障...”错误而崩溃。通过代码跟踪,我相信原因是后台线程保存数据的删除和主线程上下文合并操作之间有一个小的时间延迟。在这段时间延迟期间,主线程上下文中的一些托管对象被删除,因此当表格滚动并且数据源方法访问已删除的对象时,应用程序将崩溃。
我的信念正确吗?如果是这样,我应该如何处理这个时间延迟?
非常感谢。
【问题讨论】: