根据Apple 的文档,我们有以下内容:
当您在上下文中保存更改时,更改只会“一次存储”提交。如果您保存子上下文,则会将更改推送到其父上下文。在保存根上下文之前,更改不会保存到持久存储中。(根托管对象上下文是其父上下文为 nil 的上下文。)此外,父级在保存之前不会从子级拉取更改。如果要最终提交更改,则必须保存子上下文。
我的数据模型大致由以下NSManagedObject
层次结构组成:
Category <---->> Feed <---->> Post
我的应用程序,一个 RSS 阅读器,使用以下内容:
NSManagedObjectContext
具有NSPrivateQueueConcurrencyType
并发类型的“根” 。我使用这个 MOC 来坚持我对NSPersistentStoreCoordinator
.NSManagedObjectContext
具有NSMainQueueConcurrencyType
并发类型的“主要” 。我使用这个 MOC 来提供我的 GUI。NSManagedObjectContext
具有NSPrivateQueueConcurrencyType
并发类型的“本地” 。我在创建一批新的 Posts 对象时使用这个 MOC。
所以,我的问题是:
- 当我保存我的
localMOC
时,它会自动传播到我的mainMOC
吗?还是我仍然需要从 观察NSManagedObjectContextDidSaveNotification
并localMOC
手动将两个 MOC 与 合并mergeChangesFromContextDidSaveNotification
? - 直到昨天,批量导入都是在发送到的外部
DBOperation <NSOperation>
上下文中进行的NSOperationQueue
,这里如何进行同步?我是否必须将'mainMOC
作为参数传递给DBOperation
才能将其用作每个localMOC
' 的父级? - 我将批处理例程放回了我的位置,
MainViewController
但我不确定这是一个好主意。我应该坚持NSOperationQueue
以前的方式还是当前的[localMOC performBlock:^{ ... }];
结构为我提供了不错的后台处理?
在此先感谢您的帮助。