核心数据保存崩溃

我有一个UITableView使用FetchedResultsControllerCoreData中提取数据,并注册数据更新。

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

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

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

如果我没有保存更新后的权利,但只有在应用程序即将终止时,应用程序运行良好, UITableView被正确更新和数据持久。

任何指针为什么可能会发生? 难道我做错了什么?

受pipe理的对象上下文不是线程安全的。 你有每个线程单独的MOC

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