Завершение работы приложения iOS 4 и отмена - PullRequest
0 голосов
/ 20 августа 2010

Какой хороший способ справиться с завершением работы приложения iOS 4 при использовании NSUndoManager?

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

Если пользователь нажимает кнопку «Домой» (или принимает вызов) в процессе редактирования объекта, приложение приостанавливается. Он отправляет приложению делегат сообщение applicationDidEnterBackground, и я использую эту возможность для сохранения контекста управляемого объекта. Контекст, конечно, содержит новые правки, просто ожидающие отмены к NSUndoManager.

Вот в чем проблема: если приложение позднее «приостановлено», NSUndoManager все еще существует и все работает нормально. Однако, если приложение «убито во сне» операционной системой, стек отмены будет потерян, и изменения, внесенные в объект, станут постоянными. При повторном запуске я хочу восстановить приложение до того же состояния, в котором оно находилось до его приостановки, но, похоже, для этого требуется сохранить и восстановить стек отмены. К сожалению, я не мог найти очевидный способ сделать это.

Есть ли хороший способ поддержки отмены, чтобы он работал последовательно независимо от того, завершено ли приложение? Я надеюсь, что я упускаю что-то очевидное. Любая помощь или предложения будут оценены.

1 Ответ

0 голосов
/ 20 августа 2010

Вы можете потратить все время в мире на сериализацию вашего текущего состояния приложения на диск, чтобы вы могли перезапустить с того места, где остановились ...

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

Недостаточно памяти, обновление приложения или нажатие в переключателе задач - все это может убить ваше приложение. Вам решать, нужно ли вам сохранять точное состояние , в котором было приложение. Я думаю, что Android сохраняет сериализованное состояние приложения только около 30 минут, потому что кратковременные воспоминания не сохраняются намного дольше.

(Что? .Foo.txt.swp существует? Ему уже несколько месяцев! Как я должен знать, откуда он? Почему вы не можете просто показать мне изменения между этим и foo.txt, чтобы я мог решить, Я хочу сохранить это?)

...