この質問に対する答えを見つけようとしましたが、ドキュメントからもStackOverflowからも質問を見つけることができませんでした。すでにこのような質問がある場合は、見つからなかったので、万が一の解決策として大歓迎です。
私の状況は次のとおりです。ユーザーと運転免許証の2つのコアデータエンティティがあります。
User <--- 1 to 1 ---> Driving Licence
コアデータ操作の抽象化レイヤーとしてMagicalRecordを使用しています。
私のUserクラス(NSManagedObjectから派生)は2つのメソッドを公開しています。
ユーザーのシングルトンインスタンスにアクセスするための1つ(アプリ全体で使用される唯一のインスタンス):
+ (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フィールドはたまたまnullです。resetFieldsメソッドがバックグラウンドスレッドによって呼び出される場合があります。
他のコンテキストとのマージのために、一連の命令である可能性があります
[self.drivingLicence MR_deleteEntity];
self.drivingLicence = [DrivingLicence MR_createEntity];
混乱を招き、drivingLicenceが最後に削除される可能性がありますか?または、この予期しないnull値の理由は他に何でしょうか?