核心数据父子同步

时间:2013-11-07 08:55:02

标签: iphone objective-c cocoa-touch core-data

我遇到了子管理对象上下文之间同步的问题。

我有两种情况:

    {li> mainContextNSMainQueueConcurrencyType作为货币类型。
  1. childContext将mainContext作为父级并使用以下配置:NSPrivateQueueConcurrencyTypeNSOverwriteMergePolicyType
  2. 我还有一个模型,我们可以将其称为Model。 我需要时更改ModelchildContext的所有实例的某些属性:

    [childContext performBlock:^{
        NSArray *allModels = [self retrieveAllModelsIn:childContext];
        for(Model *model in allModels) {
            [model updateSomeProperties];
        }
    
        if ([childContext hasChanges]) {
            NSError *error;
            [childContext save:&error];
        }
    }];
    

    我在mainContext中执行以下操作:

    [mainContext performBlock:^{
        NSArray *allModels = [self retrieveAllModelsIn:mainContext];
        for(Model *model in allModels) {
            // Do some stuff with Model
            ...
    
            // Eventually I need to delete a model
            if (condition) {
                [mainContext deleteObject:model];
            }
        }       
    }];
    

    一旦解释了所有内容,问题如下:当我在[model updateSomeProperties]中执行childContext时,有时我得到一个对象故障填充,因为当childContext迭代所有模型(先前检索过)时, mainContext可能已删除该对象,因此当我尝试在childContext上对其执行某些操作时,该模型无效。

    我的问题是:避免此问题的最佳方式或最佳做法是什么?

    谢谢!

0 个答案:

没有答案