Как сохранить состояние приложения для iPhone прежде, чем завершить приложение?

Остановка таймера не означает, что это не назовут снова, в зависимости от того, когда Вы остановите таймер, timer_tick может все еще быть поставлен в очередь на цикле сообщения для формы. То, что произойдет, - то, что Вы получите еще одну галочку, которую Вы не можете ожидать. То, что можно сделать, находится в timer_tick, проверьте свойство Enabled таймера прежде, чем выполнить метод Timer_Tick.

11
задан harshalb 28 November 2009 в 06:10
поделиться

1 ответ

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

Однако есть несколько общих советов и указателей, которые должны направить вас на верный путь к разработке хорошего решения для сохранения состояния:

  1. Обычно вы захотите выполнить любые операции для сохранения состояния в applicationWillTerminate: в делегате приложения или путем прослушивания UIApplicationWillTerminateNotification в других классах.

  2. Посмотрите NSUserDefaults. Вы можете использовать NSUserDefaults для хранения пар ключ / значение (аналогично NSDictionary, хотя в NSUserDefaults можно хранить только объекты, реализующие NSCoding), относящиеся к предпочтениям или другой информации. Используйте NSUserDefaults для хранения информации о состоянии. Одно предостережение - вы не должны использовать NSUserDefaults для хранения больших объемов данных, так как это замедлит время запуска вашего приложения (поскольку значения загружаются при запуске).

  3. Более конкретно для вашего случая ... если все, что вы хотите чтобы сохранить выбранную вкладку между приложениями, вы должны реализовать applicationWillTerminate: и использовать NSUserDefaults для сохранения индекса выбранной вкладки. Затем в вашей реализации applicationDidFinishLaunching: вы проверите наличие этого ключа NSUserDefaults и установите для выбранного индекса UITabBarController сохраненное значение, если оно существует.

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

  5. Если вам нужно восстановить более общую стек навигации, включая возможно введенные данные пользователя, которые вы не хотите терять при закрытии приложения (например, если пользователь создает какую-либо новую запись), Я бы посоветовал вам сместить фокус с сохранения состояния приложения на уровне делегата приложения и вместо этого сосредоточиться на том, чтобы классы контроллеров представления слушали UIApplicationWillTerminateNotification и выполняли свое собственное сохранение определенного состояния. Вам также необходимо будет определить какой-либо механизм использования этой информации, сохраненной для каждого контроллера представления при завершении, для восстановления иерархии навигации. Это более сложный метод, который может не понадобиться в зависимости от ваших потребностей.

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

Вот пример использования NSUserDefaults: http: // robertcarlsen. net / 2009/06/19 / overly-simpleistic-saved-state-in-of-for-847

27
ответ дан 3 December 2019 в 03:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: