核心数据可以避免崩溃

时间:2010-06-22 03:16:00

标签: iphone ios core-data concurrency

我有UITableView使用CoreDataFetchedResultsController获取数据,并注册数据更新。

在第二个线程上,我从服务器下载数据并更新相同的数据(UITableView使用的数据)。更新并不复杂,它只是更新实体的BOOL字段。

当我调用对象上下文的保存时,我得到了这个例外:NSInternalInconsistencyException,原因是

"Failed to process pending changes before save.  The context is still dirty after 100 attempts. ..."

如果我在更新后立即保存,但仅在应用程序即将终止时保存,则应用程序运行良好,UITableView已正确更新,数据将保持不变。

任何关于为什么会发生这种情况的指针?我做错了吗?

1 个答案:

答案 0 :(得分:1)

托管对象上下文不是线程安全的。每个帖子都有一个单独的MOC吗?

如果是这样,我认为正确的模式是从后台NSManagedObjectDidSaveNotifications注册MOC,以便您可以在主mergeChangesFromContextDidSaveNotification上执行MOC(来自主线)。这将使您的MOCs保持同步;它不会自动发生。