Волшебная запись, кажется, сохраняется, но изменения теряются, если приложение закрывается
Я использую Magical Record 2.1 для обработки постоянства данных в моем приложении. Если я создаю новую сущность, устанавливаю некоторые ее атрибуты и сохраняю, она работает нормально. Однако позже, если я получу эту сущность, обновлю ее атрибуты и сохраню, последующие выборки будут иметь новые данные, пока я не завершу приложение и не перезапущу. Во время нового сеанса приложения старые данные появляются снова.
Вот как я создаю новую сущность:
self.localContext = [NSManagedObjectContext MR_defaultContext];
self.theNewListing = [Listing MR_createInContext:self.localContext];
Я использую MRDefaultContext, прочитав это сообщение в блоге: http://saulmora.com/2013/09/15/why-contextforcurrentthread-doesn-t-work-in-magicalrecord/
В этом случае мой основной атрибут - это словарь, и я установил его так:
NSMutableDictionary *tempDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"A description", @"slFieldDescription", etc, etc, nil];
self.theNewListing.dataDictionary = tempDictionary;
Вот как я это сохранил:
[self.presentingViewController dismissViewControllerAnimated:YES completion:^(void) {
[self.localContext MR_saveToPersistentStoreWithCompletion:^(BOOL success, NSError *error){
if(!success) {
NSLog(@"%@", error);
}
else {
[self.thePresentingVC refreshCollectionViews:nil];
}
}];
}];
Я отображаю свои данные в виде коллекции, и в этот момент все выглядит хорошо. Если я прекратить и перезапустить данные все еще там.
Если я получу объект еще раз и обновлю атрибуты следующим образом:
NSMutableDictionary *newTempDictionary = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"A new description", @"slFieldDescription", etc, etc, nil];
self.theNewListing.dataDictionary = newTempDictionary;
Затем сохраните, используя тот же код сохранения, что и выше, а затем обновите представление моей коллекции, используя приведенный ниже код, все выглядит хорошо.
self.listingsArray = [[NSMutableArray alloc] initWithArray:[Listing MR_findAllSortedBy:@"dateListed" ascending:NO]];
[self.mainCollectionView reloadData];
То есть, пока я не выйду из приложения и не перезапущу.
Если вам интересно, я использую FTASync, и он поддерживает только MR 2.1, поэтому я не обновил его до последней версии.
Спасибо!
2 ответа
Взломали это!!
Я заметил, что другие мои атрибуты были сохранены, но только не этот (этот содержит все данные, представленные в пользовательском интерфейсе), и это привело меня к другому исследованию.
Итак, похоже, что мне нужно было работать с неизменяемыми словарями, чтобы хранить эти данные, как описано здесь:
Основная проблема сохранения данных: невозможно обновить трансформируемый атрибут (NSArray)
Не уверен ни в MR, ни в том, зачем он тебе нужен. Если эта структура может дать вам основной контекст, просто вызовите родной Core Data save.
[context save:nil];