2016-01-24 3 views
1

После перезапуска приложения данные из данных ядра не возвращаются должным образом. И запрос на выборку для получения определенной записи также терпит неудачу. FetchRequestController не захватывает какую-либо запись после повторного запуска приложения.Не удалось получить предыдущие данные с EncryptedCoreData

Я использую 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 Дев [10556: 158617] CoreData: предупреждение: NSManagedObjectContext делегата отменяет неисправности обработки поведения молча удалить объект с ID '0x7feb02de5c10 ' и заменителем ноля/0 для все значения свойств вместо метания

Если я использую NSSQLiteStoreType вместо EncryptedStoreType все работает отлично. Можете ли вы направить меня, что я делаю неправильно?

Поскольку из-за вышеуказанной проблемы записи базы данных добавляются несколько раз, а запрос на выборку не удается получить управляемый объект с помощью uniqueId.

ответ

0

Т.Л., д-р

Не используйте 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, что и ключевое слово. Попробуйте удалить и проверить.

Примечание: Даже после переименования этого свойства из модели мне пришлось удалить и установить приложение еще раз, но для меня это не большая проблема, так как он еще не опубликован.

Смежные вопросы