【发布时间】:2014-08-03 20:39:22
【问题描述】:
我使用 Magical record 和 Core Data 已经有一段时间了,但我仍然无法弄清楚如何确保对象的唯一性。
假设我有一个函数:
- (void) foo {
[MagicalRecord saveWithBlock:^(NSManagedObjectContext *localContext) {
// find if model with x = myValue exists
MyModel *model = [MyModel MR_findFirstWithPredicate:[NSPredicate predicateWithFormat:@"x = %@", myValue] inContext:localContext];
// if there is no model - create it!
if (!model) {
model = [MyModel MR_createInContext:localContext];
model.x = myValue;
// etc...
}
}];
}
在foo 被调用两次(或 3、4...等次)之前一切正常。现在localContext 不知道其他线程中的localContext 并且唯一性检查通过了。因此,在上下文合并后,我有 2 个(3,4...等)具有给定值的实例(而不是 1 个)。
如何确保只有 1 个具有给定值的对象退出?
附言。 —validateValue:forKey:error: 无济于事,因为它调用了 BEFORE 上下文合并(在保存对象期间)。
【问题讨论】:
标签: ios core-data magicalrecord