重新启动应用后,核心数据中的数据无法正常返回。获取特定记录的获取请求也会失败。重新启动应用后,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
代码与this
当我在关闭应用程序之前打印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的托管对象。
答案 0 :(得分:0)
TL;博士
不要在模型上使用SQLite Keywords(属性,关系,实体等)。
通常使用CoreData可以安全地使用SQLite保留关键字,但使用EncryptedCoreData时显然不是这样。
此#232问题也解释了这一点。
在我的项目中,我from
作为我的某个模特的属性,而这个单一属性是罪魁祸首。
我可以从该代码中看到:
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;
})
您正在使用order
,这也是关键字。尝试删除并检查。
注意:即使重新命名模型中的该属性,我也必须再次卸载并安装应用程序,因为它还没有发布,所以对我来说没什么麻烦。