子と親の管理対象オブジェクト コンテキスト間の同期に問題があります。
私は2つのコンテキストを持っています:
mainContext
NSMainQueueConcurrencyType
通貨タイプとして。childContext
mainContext を親として、次の構成を使用:NSPrivateQueueConcurrencyType
およびNSOverwriteMergePolicyType
と呼べるモデルもありますModel
。必要に応じて、 Model
inのすべてのインスタンスのいくつかのプロパティを変更します。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
。
私の質問は次のとおりです。この問題を回避するための最良の方法またはベストプラクティスは何ですか?
ありがとう!