アプリの再起動後、コアデータからのデータが正しく返されません。また、特定のレコードを取得するためのフェッチ リクエストも失敗します。アプリが再起動されると、FetchRequestController はレコードを取得しません。
プロジェクトのデータを保護するためにencrypted-core-dataを使用しています。データを解析して managedObjectContext に保存できます。私のコードは次のようになります
for (NSDictionary *data in categories) {
//Use MagicRecord api to get a record
CMCategories *Obj = [CMCategories MR_findFirstByAttribute:@"uniqueId"
withValue:[data valueForKey:@"id"]
inContext:managedObjectContext];
if (!Obj) {
Obj = [CMCategories MR_createEntityInContext:managedObjectContext];
}
Obj.name = [data valueForKey:@"CategoryName"];
Obj.language = [data valueForKey:@"LanguageCode"];
Obj.uniqueId = [data valueForKey:@"id"];
}
NSError *error = nil;
if (![_managedObjectContext save:&error]) {
NSLog(@"Error saving context: %@\n%@", [error localizedDescription], [error userInfo]);
abort();
}
コードはエラーなしで機能します。私persistentStoreCoordinator
のコードはこれmanagedObjectContext
と同じです
アプリを閉じる前にobjを印刷すると、印刷されます
2016-01-24 23:59:11.806 Chare Dev[10556:158617] <CMCategories: 0x7feb00d24a90> (entity: CMCategories; id: 0x7feb02ef5890 <x-coredata://B947ACD3-E248-4D4F-B81E-236E100BB34D/CMCategories/p5> ; data: {
channels = (
);
language = en;
name = Professional;
order = 0;
uniqueId = 15;
})
しかし、アプリの再起動後、すべてのオブジェクトを取得して印刷すると、次のように印刷されます
2016-01-24 23:59:11.795 Chare Dev[10556:158617] <CMCategories: 0x7feb02de4aa0> (entity: CMCategories; id: 0x7feb02de5c10 <x-coredata://B947ACD3-E248-4D4F-B81E-236E100BB34D/CMCategories/p2> ; data: {
channels = "<relationship fault: 0x7feb02922450 'channels'>";
language = nil;
name = nil;
order = nil;
uniqueId = nil;
})
プロパティを取得しようとすると NSString *string = obj.uniqueId
2016-01-24 23:59:11.795 Chare Dev[10556:158617] CoreData: 警告: NSManagedObjectContext デリゲートが障害処理動作をオーバーライドして、ID '0x7feb02de5c10' のオブジェクトをサイレント モードで削除し、スローする代わりにすべてのプロパティ値を nil/0 に置き換えました
NSSQLiteStoreType
代わりに使用すると、EncryptedStoreType
すべて正常に動作します。私が間違っていることを教えてもらえますか?
上記の問題により、データベース レコードが複数回追加され、フェッチ リクエストが uniqueId を持つ管理対象オブジェクトのフェッチに失敗するためです。