CoreData сохранить / отменить несохраненные изменения

У меня есть список объектов в UITableView , управляемый NSFetchedResultsController . Когда пользователь выбирает объект, отображается окно редактирования, позволяющее пользователю редактировать выбранный экземпляр NSManagedObject . Свойства объекта обновляются в объекте по мере того, как пользователь вносит изменения.

Дело в том, что есть, как обычно, кнопка "Сохранить" и кнопка "Отмена". Если пользователь нажимает «Сохранить», NSManagedObjectContext сохраняется, и изменение отражается.Однако, если пользователь нажимает «Отмена», мне нужно, чтобы объект вернулся в то состояние, в котором он находился раньше. Вызов [откат ManagedObjectContext] для этой цели не работает.

Кто-нибудь знает, как это правильно реализовать? Я не могу сохранить свойства объекта как временные отдельные ivars во время редактирования, потому что есть несколько объектов, которые можно редактировать, и все они имеют разные свойства.

Обновление

В настоящее время я сохраняю NSManagedObject в переменной экземпляра и вызываю save: для сохранения и откат для отмены . Переменные экземпляра изменяются с использованием либо object.property = something , либо [object setValue: something forKey: @ "property"] . Это не работает должным образом, вместо этого происходит следующее поведение:

  1. Если вы редактируете и сохраняете, изменения обновляются должным образом. Однако, если вы отредактируете снова и отмените без внесения изменений, состояние объекта вернется к состоянию до сохранения.

  2. Если вы отредактируете и отмените, изменения все равно будут обновлены, как если бы они были сохранены. При повторном редактировании и отмене (без внесения изменений) объект вернется в то состояние, в котором он находился раньше.

Также:

Может ли это иметь какое-либо отношение к способу инициализации NSFetchedResultsController , который используется для заполнения табличного представления? Код:

NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSString *entityName = self.entityName;
NSEntityDescription *entity = [NSEntityDescription entityForName:entityName inManagedObjectContext:self.context];
[fetchRequest setEntity:entity];

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
[fetchRequest setSortDescriptors:[NSArray arrayWithObject:sortDescriptor]];

[fetchRequest setIncludesPendingChanges:NO];

NSFetchedResultsController *theFetchedResultsController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:_context sectionNameKeyPath:nil cacheName:@"Root"];
self.fetchedResultsController = theFetchedResultsController;
_fetchedResultsController.delegate = self;
5
задан Greg 29 February 2012 в 09:22
поделиться