我在子托管对象上下文和父托管对象上下文之间的同步方面遇到问题。
我有两种情况:
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
。
我的问题是:避免这个问题的最佳方法或最佳实践是什么?
谢谢!