0

子と親の管理対象オブジェクト コンテキスト間の同期に問題があります。

私は2つのコンテキストを持っています:

  1. mainContextNSMainQueueConcurrencyType通貨タイプとして。
  2. childContextmainContext を親として、次の構成を使用:NSPrivateQueueConcurrencyTypeおよびNSOverwriteMergePolicyType

と呼べるモデルもあります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]これchildContextchildContext、すべてのモデル (以前に取得したもの) を反復しているときにmainContext、オブジェクトが削除されている可能性があるため、何かをしようとしているときにモデルが無効になる可能性があるためです。その上にchildContext

私の質問は次のとおりです。この問題を回避するための最良の方法またはベストプラクティスは何ですか?

ありがとう!

4

0 に答える 0