Волшебная запись, кажется, сохраняется, но изменения теряются, если приложение закрывается

Я использую 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];
Другие вопросы по тегам