cho*_*rry 5 core-data objective-c nsoperation nsmanagedobject nsmanagedobjectcontext
我有两个实例NSManagedObjectContext:一个在主线程中使用,另一个在后台线程中使用(通过NSOperation.)为了线程安全,这两个上下文只共享一个NSPersistentStoreCoordinator.
我遇到的问题是第一个上下文(在主线程上)中的挂起更改在-save执行之前不可用于第二个上下文.这是可以理解的,因为共享的持久性存储不会有副本NSManagedObjects由被跟踪-insertedObjects,-updatedObjects以及-deletedObjects被持久.
遗憾的是,这会给用户体验带来问题:任何未保存的更改都不会出现在后台线程中生成的(耗时)报告中.
我能想到的唯一解决方案是讨厌的:从第一个上下文中取出插入的,更新的和删除的对象,并将它们移植到第二个上下文的对象图上.数据集中有一些非常复杂的关系,所以我对这个方向犹豫不决.我希望有人在这里作为更好的解决方案.
如果这是在 10.7 以下,则有一些解决方案:一种是您可以嵌套 ManagedObjectContexts,因此您可以在正在修改的对象中 \xe2\x80\x9csave\xe2\x80\x9d ,并且它不会 \xe2\x80\x99t 保存所有方式到磁盘,但它将使更改可供主上下文的其他子级使用。
\n\n在 10.7 之前,您可能必须自己复制更改。这是\xe2\x80\x99t 超级难的,因为你可以只监听一个对象NSManagedObjectContextObjectsDidChangeNotification,然后从主上下文中重新应用更改。(应该是大约 20 行代码。)我想你永远不必保存第二个上下文?
| 归档时间: |
|
| 查看次数: |
1432 次 |
| 最近记录: |