Какой хороший способ справиться с завершением работы приложения iOS 4 при использовании NSUndoManager
?
У меня есть приложение для iPhone (iOS 4), которое использует Core Data. Приложение позволяет пользователю редактировать управляемые объекты, и я реализую отмену, используя NSUndoManager
простым способом: перед модальным отображением представления редактора я создаю новый NSUndoManager
для контекста управляемого объекта. Я также начинаю отмену группировки, чтобы любые изменения можно было легко отменить, если пользователь нажмет кнопку «Отмена». Если пользователь нажимает «Сохранить», я просто удаляю менеджер отмены, и изменения становятся постоянными. Пока все хорошо.
Если пользователь нажимает кнопку «Домой» (или принимает вызов) в процессе редактирования объекта, приложение приостанавливается. Он отправляет приложению делегат сообщение applicationDidEnterBackground
, и я использую эту возможность для сохранения контекста управляемого объекта. Контекст, конечно, содержит новые правки, просто ожидающие отмены к NSUndoManager
.
Вот в чем проблема: если приложение позднее «приостановлено», NSUndoManager
все еще существует и все работает нормально. Однако, если приложение «убито во сне» операционной системой, стек отмены будет потерян, и изменения, внесенные в объект, станут постоянными. При повторном запуске я хочу восстановить приложение до того же состояния, в котором оно находилось до его приостановки, но, похоже, для этого требуется сохранить и восстановить стек отмены. К сожалению, я не мог найти очевидный способ сделать это.
Есть ли хороший способ поддержки отмены, чтобы он работал последовательно независимо от того, завершено ли приложение? Я надеюсь, что я упускаю что-то очевидное. Любая помощь или предложения будут оценены.