根据Apple的文档,我们具有以下优势:
当您在上下文中保存更改时,所做的更改只会“一次存储”。如果保存子上下文,则更改将推送到其父上下文。在保存根上下文之前,更改不会保存到持久性存储中。(根管理对象上下文是其父上下文为nil的上下文。)此外,父级在保存之前不会从子级中提取更改。如果要最终提交更改,则必须保存子上下文。
我的数据模型大致由以下NSManagedObject
层次组成:
Category <---->> Feed <---->> Post
我的应用程序RSS读取器使用以下内容:
NSManagedObjectContext
具有NSPrivateQueueConcurrencyType
并发类型的“根” 。我使用此MOC来保留对的更改NSPersistentStoreCoordinator
。
NSManagedObjectContext
具有NSMainQueueConcurrencyType
并发类型的“主” 。我使用此MOC来填充我的GUI。
NSManagedObjectContext
具有NSPrivateQueueConcurrencyType
并发类型的“本地” 。创建一批新的Posts对象时,我使用此MOC。
因此,我的问题是:
localMOC
,它会自动传播到我的收藏夹中mainMOC
吗?或者我还是要观察NSManagedObjectContextDidSaveNotification
从localMOC
和手动合并两个MOCS mergeChangesFromContextDidSaveNotification
?DBOperation <NSOperation>
发送到的外部上下文中进行NSOperationQueue
,在这里如何进行同步?我是否必须将mainMOC
作为参数传递给DBOperation
,才能将其用作每个localMOC
的父项?MainViewController
但我不确定这是一个好主意。我应该坚持使用NSOperationQueue
类似工具还是当前[localMOC performBlock:^{ ... }];
结构为我提供良好的后台处理?在此先感谢您的帮助。
我终于通过实现自己的保存例程解决了我的问题:
[_localMOC performBlockAndWait:^{
NSError *errLoc=nil;
if (![self.mainMOC obtainPermanentIDsForObjects:@[[[_mainMOC insertedObjects] arrayByAddingObjectsFromArray:[_mainMOC updatedObjects]]] error:&errLoc]) {
NSLog(@" ... ");
}
if (![_localMOC save:&errLoc]) {
NSLog(@" ... ");
}
[_mainMOC performBlockAndWait:^{
NSError *errMain=nil;
if (![_mainMOC save:&errMain]) {
NSLog(@" ... ");
}
}]
}];
请注意,_mainMOC
正在从中观察到,AppDelegate
并且其更改将由_saveMOC
其父级异步地保留在磁盘上。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句