【发布时间】:2013-11-27 07:54:52
【问题描述】:
根据Apple's doc,我们有以下内容:
当您在上下文中保存更改时,更改只会“一次存储”提交。如果您保存子上下文,则会将更改推送到其父上下文。在保存根上下文之前,更改不会保存到持久存储中。 (根托管对象上下文是其父上下文为 nil 的上下文。)此外,父级在保存之前不会从子级拉取更改。如果您想最终提交更改,则必须保存子上下文。
我的数据模型大致由以下NSManagedObject层次结构组成:
Category <---->> Feed <---->> Post
我的应用程序,一个 RSS 阅读器,使用以下内容:
具有
NSPrivateQueueConcurrencyType并发类型的“根”NSManagedObjectContext。我使用此 MOC 将我的更改持久化到NSPersistentStoreCoordinator。具有
NSMainQueueConcurrencyType并发类型的“主”NSManagedObjectContext。我使用这个 MOC 来提供我的 GUI。具有
NSPrivateQueueConcurrencyType并发类型的“本地”NSManagedObjectContext。我在创建一批新的 Posts 对象时使用这个 MOC。
所以,我的问题是:
- 当我保存我的
localMOC时,它会自动传播到我的mainMOC吗?还是我仍然需要从localMOC观察NSManagedObjectContextDidSaveNotification并手动将两个MOC 与mergeChangesFromContextDidSaveNotification合并? - 直到昨天,批量导入是在发送到
NSOperationQueue的外部DBOperation <NSOperation>上下文中进行的,这里如何进行同步?我是否必须将mainMOC作为参数传递给DBOperation才能将其用作每个localMOC的父级? - 我将批处理例程放回我的
MainViewController,但我不确定这是一个好主意。我应该像以前一样坚持NSOperationQueue还是当前的[localMOC performBlock:^{ ... }];结构为我提供不错的后台处理?
提前感谢您的帮助。
【问题讨论】:
-
“根”、“主”和“本地”之间的关系是什么。大概“main”和“local”都有“root”作为它们的父级?
-
嘿 Mike,我读了那篇文章,它的“异步保存”段落启发了我:
root是main的父级,而main是local的父级。在本文中,root将是writerMOC。我只是不确定如何在我的应用中部署这些。
标签: ios core-data concurrency nsmanagedobjectcontext nsoperationqueue