2013-11-02 2 views
1

Я использую 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, поэтому я не обновил его до последней версии.

Спасибо!

ответ

0

Трещин!

Я заметил, что мои другие атрибуты сохранялись, только не этот (этот хранит все данные, представленные в пользовательском интерфейсе), и это привело меня к другой линии расследования.

Таким образом, кажется, что мне нужно работать с неизменяемыми словарями для хранения этих данных, как описано здесь:

Core Data saving problem: can't update transformable attribute (NSArray)

0

Не уверен в том, что MR, и зачем вам это нужно. Если эта структура может дать вам основной контекст, просто позвоните в исходное хранилище Core Data.

[context save:nil]; 
+0

MR велик, когда он работает! Это экономит много времени. Кроме того, я также использую FTASync, который требует MR. Я попытался добавить в основные данные save после сохранения MR в качестве теста, но все равно не повезло. –

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