ios - 核心数据确保数据唯一性

标签 ios core-data magicalrecord

我使用 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/

相关文章:

core-data - 在Xcode 4中为核心数据属性生成代码

ios5 - MagicalRecord iCloud 备份

objective-c - CoreData + Magical Record 运行选择查询

ios - ios6 中 tabbarcontroller 的 UIViewControllerHierarchy 不一致问题

android - 是否可以创建一个 ios/android 应用程序来限制用户在特定时间段内使用应用程序或网站

ios - 如何测试依赖于 UIUserInterfaceIdiom (ios) 的代码

ios - 使用 AVAudioPlayer 播放音频

ios - NSManagedObject 类并创建一个 Setter 方法

iPhone - 将核心数据添加到现有项目中?

ios - MagicalRecord - 使用 saveWithBlock 时没有 contextDidSaveNotification