我使用 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上下文合并(在保存对象期间)。
最佳答案
我想一种方法是在合并之前进行检查,并更改或删除重复值。您可以通过监听 NSManagedObjectContextWillSaveNotification
并在调用 mergeChangesFromContextDidSaveNotification
之前进行更改来完成此操作。
关于ios - 核心数据确保数据唯一性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25108878/