0

我在子托管对象上下文和父托管对象上下文之间的同步方面遇到问题。

我有两种情况:

  1. mainContextNSMainQueueConcurrencyType作为货币类型。
  2. childContext以 mainContext 作为父级和以下配置:NSPrivateQueueConcurrencyTypeNSOverwriteMergePolicyType

我还有一个模型,我们可以称之为Model. 我在需要时更改了Modelin的所有实例的一些属性:childContext

[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

我的问题是:避免这个问题的最佳方法或最佳实践是什么?

谢谢!

4

0 回答 0