Нужно ли мне вручную сохранять managedObjectContext для NSFetchedResultsController, если я изменяю какой-либо атрибут? - PullRequest
6 голосов
/ 14 марта 2012

Я использую NSFetchedResultsController для заполнения и управления источником данных моих таблиц.

Когда пользователь выбирает определенную строку, всплывает лист действий и позволяет пользователю изменить значение для этой строки:

NSManagedObject *managedObject = [fetchedResultsController objectAtIndexPath:selectedRowIndexPath];
[managedObject setValue:status forKey:@"status"];

Это работает очень хорошо, и я сразу вижу изменения в виде таблицы. Это означает, что NSFetchedResultsController знает, что что-то изменилось, и, следовательно, перезагружает эту табличную ячейку. Когда я останавливаюсь и закрываю свое приложение (полностью), а затем снова открываю его, изменение не сохраняется.

Я думаю, что NSFetchedResultsConroller заботится о сохранении изменений.

Нужно ли сохранять вручную, используя следующий код после каждого изменения?

// Save the context.
NSError *error = nil;
if (![self.managedObjectContext save:&error]) {
    NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
    abort();
}

Или, возможно, позвоните по этому коду:

- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject 
       atIndexPath:(NSIndexPath *)indexPath 
     forChangeType:(NSFetchedResultsChangeType)type 
      newIndexPath:(NSIndexPath *)newIndexPath

1 Ответ

6 голосов
/ 14 марта 2012

Вы правы.Вам необходимо вручную сохранить контекст в магазине.NSFetchedResultsController извлекает данные из контекста, но не сохраняет данные в хранилище.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...