Начиная с ваших конкретных вопросов - Да, вы можете вручную определить границы операции отмены, используя beginUndoGrouping и endUndoGrouping.
В этом случае операция отмены должна работать независимо от того, установлена группа groupsByEvent или нет.Это связано с тем, что все группы отмен, которые генерируются циклом событий, вложены в основную открытую группу отмен, начатую с beginUndoGrouping, и до тех пор, пока вы вызываете undoNestedGroup непосредственно после вызова endUndoGrouping, она должна работать.Если вы не используете группировки отмен событий цикла, не беспокойтесь об этом и установите для этого значение NO.
Чтобы сделать ваши изменения постоянными, закройте группу отмены с помощью endUndoGrouping и вызовите save в своем контексте.Вызовы processPendingChanges не нужны и могут вызвать проблемы во вложенных группах.Если вы хотите очистить операции отмены, вызовите removeAllActions на вашем устройстве отмены после endUndoGrouping - это гарантирует, что изменения никогда не будут отменены.
Используйте точки останова / nslog, чтобы убедиться, что ваши начальные / конечные вызовы один к одному.
Если вы хотите, чтобы действие отмены походило на кнопку отмены, вам нужно сделать следующее:
Переместить beginUndoGrouping в viewWillAppear
Вызов endUndoGrouping в viewWillDisappear
повторное открытие отмены группировки в конце действия отмены
reоткрывать отменять группировку в конце действия сохранения
В противном случае, если вы оставите все как есть, обязательно закройте диалоговое окно в ваших действиях сохранения и отмены, чтобы избежать возможности завершения EndUndoGrouping.звонили несколько раз.
Если у вас есть какие-либо вопросы, пожалуйста, прокомментируйте, и я обновлю.
Удачи!