【发布时间】:2012-11-13 11:58:58
【问题描述】:
我试图找到这个问题的答案,但我无法从文档和 StackOverflow 中找出问题。如果已经有这样的问题,我只是没有找到它,所以它会非常欢迎作为以防万一的解决方案。
我的情况是: 我有两个核心数据实体,一个用户和一个驾驶执照。
User <--- 1 to 1 ---> Driving Licence
我使用Magical Record 作为核心数据操作的抽象层。
我的用户类(从 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];
}
有时,我会很随意地说,drivingLicence 字段恰好为空。 可能会有后台线程调用 resetFields 方法的情况。
难道是为了与其他上下文合并,指令序列
[self.drivingLicence MR_deleteEntity];
self.drivingLicence = [DrivingLicence MR_createEntity];
会导致一些混乱,导致驾驶执照最终被删除? 或者这个意外的空值还有什么原因?
【问题讨论】:
标签: iphone objective-c ios core-data magicalrecord