У меня есть список объектов в UITableView
, управляемый NSFetchedResultsController
. Когда пользователь выбирает объект, отображается окно редактирования, позволяющее пользователю редактировать выбранный экземпляр NSManagedObject
. Свойства объекта обновляются в объекте по мере того, как пользователь вносит изменения.
Дело в том, что, как обычно, есть кнопка "Сохранить" и кнопка "Отмена". Если пользователь нажимает сохранить, NSManagedObjectContext
сохраняется, и изменение отражается. Однако, если пользователь нажимает кнопку «Отмена», мне нужно вернуть объект в состояние, в котором он был раньше. Вызов [managedObjectContext rollback]
для этой цели не работает.
Кто-нибудь знает, как правильно это реализовать? Я не могу сохранить свойства объекта как временные отдельные ivars во время редактирования, потому что есть несколько объектов, которые можно редактировать, каждый из которых имеет разные свойства.
Обновление
В данный момент я сохраняю NSManagedObject
в переменной экземпляра и вызываю save:
для сохранения и rollback
для отмены. Переменные экземпляра модифицируются с использованием object.property = something
или [object setValue:something forKey:@"property"]
. не работает должным образом, вместо этого создается следующее поведение:
Если вы редактируете и сохраняете, изменения обновляются, как ожидается. Однако при повторном редактировании и отмене без внесения изменений состояние объекта возвращается к исходному состоянию, равному до сохранения.
Если вы редактируете и отменяете, изменения по-прежнему обновляются, как если бы они были сохранены. Повторное редактирование и отмена (без внесения изменений) вернет его в состояние, в котором он был до этого.
Также:
Может ли это быть как-то связано с тем, как я инициализирую 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;