Вложенная группа отмены с CoreData

Я хочу добавить диспетчер отмены в приложение iphone с резервными данными. Когда пользователь пытается добавить новый объект (нажав кнопку +), я загружаю новый модальный контроллер просмотра и запускаю новую группу отмены в viewDidLoad.

Когда пользователь нажимает кнопку «Отмена», я хочу отменить изменения в обратном вызове cancelAction .

Запросы:

  1. Можно ли запустить вложенную группу отмены и сохранить ее в цикле событий и сопоставить все изменения, сделанные в одной группе отмены? Прямо сейчас, когда я вызываю beginUndoGrouping в cancelAction, я получаю отсутствующее исключение beginUndoGrouping.
  2. Какое значение имеет API groupsByEvent для NSUndoManager? Требуется ли установить для него значение NO, чтобы группа отмены сохранялась через цикл событий?
  3. Что нужно сделать в обратном вызове saveAction, чтобы изменения были постоянными (кроме вызова save в mangedObjectContext)? Как сообщить диспетчеру отмены действий, чтобы он прекратил отслеживать изменения?

Сообщение об ошибке:

* Завершение работы приложения из-за неперехваченного исключения «NSInternalInconsistencyException», причина: «_endUndoGroupRemovingIfEmpty :: NSUndoManager 0x75415f0 находится в недопустимом состоянии, endUndo без соответствия begin

Пример кода:

// RootViewController.m
- (void) addAction {
   // Load Modal View Controller to add new object

}

// AddViewController.m
- (void) viewDidLoad {
   // Start nested undo group
   [self.managedObjectContext processPendingChanges];
   [self.managedObjectContext.undoManager beginUndoGrouping];

   [self createModel];

}

- (void) cancelAction {
    // Revert all changes
    [self.managedObjectContext processPendingChanges];
    [self.managedObjectContext.undoManager endUndoGrouping];

    [self.managedObjectContext.undoManager undoNestedGroup];

    ...
}

- (void) saveAction {

    // Save changes
}
6
задан siasl 31 January 2011 в 23:30
поделиться