核心数据保存崩溃
我有一个UITableView
使用FetchedResultsController
从CoreData
中提取数据,并注册数据更新。
在第二个线程中,我从服务器下载数据并更新相同的数据( 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
同步; 它不会自动发生。
- 为什么我应该为每个新线程或NSOperation创build一个NSManagedObjectContext,而不是在主线程上调用Core Data?
- 使用dispatch_group_async的并发代码的性能比单线程版本慢得多
- 在UITableView上执行GCD
- 如何找出是什么导致IOS设备上的错误崩溃报告?
- Swift 3 GCDlockingvariables和block_and_release错误
- 在当前队列上同步分派
- NSOperationQueue mainQueue vs performSelectorOnMainThread?
- 将子项ManagedObjectContext所做的更改复制到实体的父级
- 使核心数据线程安全