1

应用程序重新启动后,核心数据中的数据未正确返回。获取特定记录的获取请求也会失败。重新启动应用程序后,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();
}

该代码可以正常工作。我的persistentStoreCoordinatormanagedObjectContext代码是一样

当我在关闭应用程序之前打印 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 的托管对象。

4

1 回答 1

0

tl;博士

不要在模型上使用SQLite 关键字(属性、关系、实体等)。


通常使用 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,这也是一个关键字。尝试删除并检查。

注意:即使从模型中重命名该属性后,我也必须再次卸载并安装该应用程序,因为它尚未发布,所以对我来说并不麻烦。

于 2016-07-26T11:54:44.083 回答