我遇到了子管理对象上下文之间同步的问题。
我有两种情况:
mainContext
以NSMainQueueConcurrencyType
作为货币类型。
childContext
将mainContext作为父级并使用以下配置:NSPrivateQueueConcurrencyType
和NSOverwriteMergePolicyType
我还有一个模型,我们可以将其称为Model
。
我需要时更改Model
中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
上对其执行某些操作时,该模型无效。
我的问题是:避免此问题的最佳方式或最佳做法是什么?
谢谢!