iphone - 核心数据合并行为

标签 iphone objective-c ios core-data magicalrecord

我试图找到这个问题的答案,但我无法从文档和 StackOverflow 中找出问题。如果已经有这样的问题,我只是没有找到它,所以作为万一的解决方案将非常受欢迎。

我的情况是: 我有两个核心数据实体,一个用户和一个驾驶执照。

User  <--- 1 to 1 ---> Driving Licence

我正在使用Magical Record作为核心数据操作的抽象层。

我的 User 类(派生自 NSManagedObject)公开了 2 个方法。

用于访问用户的单例实例(整个应用程序中唯一使用的实例):

+ (User *)currentUser {

    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if ([User MR_findFirst] == nil) {

            User *user = [User MR_createEntity];
            user.drivingLicence = [DrivingLicence MR_createEntity];
            [[user managedObjectContext] MR_save];
        }
    });

    return [User MR_findFirst];
}

以及用于重置用户数据的方法(派生自 NSManagedObject):

- (void)resetFields
{
   self.name = nil;
   self.surname = nil;
   ....
   [self.drivingLicence MR_deleteEntity];
   self.drivingLicence = [DrivingLicence MR_createEntity];
   [self.managedObjectContext MR_save];
}

有时,我会随机地说,driveLicence 字段恰好为空。 有时后台线程可能会调用 resetFields 方法。

是否是为了与其他上下文合并,指令序列

   [self.drivingLicence MR_deleteEntity];
   self.drivingLicence = [DrivingLicence MR_createEntity];

会导致一些困惑,导致驾驶执照最后被删除吗? 或者还有什么原因导致这个意外的空值?

最佳答案

当您使用 MR_createEntity 时,您会隐式使用通过[NSManagedObjectContext MR_defaultContext]访问的默认上下文。这样做是非常危险的,除非你绝对肯定你是从主线程调用它的。在您的示例中,如果从主线程调用所有内容并且您的 self.managementObjectContext 实例变量也指向默认上下文,那么所有这些都应该正常工作。否则,您将需要明确您正在使用哪些上下文。 MagicalRecord 通过在每个需要上下文才能工作的方法末尾添加一个 inContext: 可选参数来为您提供这些约定。查看 MR_createInContext: 方法并明确您的上下文用法

关于iphone - 核心数据合并行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13360366/

相关文章:

ios - UIWebView youtube iframe api autoplay/playsinline 在 iOS7 中退出工作

iphone - 访问类中的常量而不在 Objective C 中创建类的实例

iphone - deleteItemsAtIndexPaths 中的 UICollectionView 断言失败

iphone - 如何在 MKMapView 上绘制当前位置到所需位置之间的路线?

iOS Facebook Audience Network SDK 崩溃 - +[FBSDKTypeUtility 字典 :objectForKey:ofType:]:

ios - 通过 HTTP 流式传输 AAC 音频时的 AVPlayer 延迟

ios - App瘦身过程中出现iTunes Connect Errors,你的App瘦身不了?

ios - 使用 Xcode 出现错误 "No such module",但框架在那里

ios - WebThread JavaScriptCore 崩溃——这个崩溃报告意味着什么

iphone - 如何显示 NSDocument 目录中的所有图像