我是否仍需要在使用子级父代NSManagedObjectContext的应用程序中使用mergeChangesFromContextDidSaveNotification

mirx

根据Apple的文档,我们具有以下优势:

当您在上下文中保存更改时,所做的更改只会“一次存储”。如果保存子上下文,则更改将推送到其父上下文。在保存根上下文之前,更改不会保存到持久性存储中。(根管理对象上下文是其父上下文为nil的上下文。)此外,父级在保存之前不会从子级中提取更改。如果要最终提交更改,则必须保存子上下文。

我的数据模型大致由以下NSManagedObject层次组成:

Category <---->> Feed <---->> Post

我的应用程序RSS读取器使用以下内容:

  • NSManagedObjectContext具有NSPrivateQueueConcurrencyType并发类型的“根” 我使用此MOC来保留对的更改NSPersistentStoreCoordinator

  • NSManagedObjectContext具有NSMainQueueConcurrencyType并发类型的“主” 我使用此MOC来填充我的GUI。

  • NSManagedObjectContext具有NSPrivateQueueConcurrencyType并发类型的“本地” 创建一批新的Posts对象时,我使用此MOC。

因此,我的问题是:

  1. 保存我的收藏夹后localMOC,它会自动传播到我的收藏夹中mainMOC吗?或者我还是要观察NSManagedObjectContextDidSaveNotificationlocalMOC和手动合并两个MOCS mergeChangesFromContextDidSaveNotification
  2. 直到昨天,批量导入仍在DBOperation <NSOperation>发送到的外部上下文中进行NSOperationQueue,在这里如何进行同步?我是否必须将mainMOC作为参数传递DBOperation,才能将其用作每个localMOC的父项?
  3. 我将批处理例程放回我的例程中,MainViewController但我不确定这是一个好主意。我应该坚持使用NSOperationQueue类似工具还是当前[localMOC performBlock:^{ ... }];结构为我提供良好的后台处理?

在此先感谢您的帮助。

mirx

我终于通过实现自己的保存例程解决了我的问题:

[_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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档