Ответ 1
Нет единого размера для всех, точный ответ на этот вопрос - реализация состояния сохранения приложения будет в значительной степени зависеть от структуры приложения настолько, что любое единственное решение вряд ли подходит вашему конкретному случаю.
Однако есть несколько общих советов и указателей, которые должны поставить вас на правильный путь к разработке хорошего решения для сохранения состояния:
-
Обычно вам нужно выполнить любые операции для сохранения состояния в
applicationWillTerminate:
в делетете приложения или прослушиваниеUIApplicationWillTerminateNotification
в других классах. -
Посмотрите на NSUserDefaults. Вы можете использовать NSUserDefaults для хранения пар ключ/значение (аналогично NSDictionary, хотя вы можете хранить только объекты, реализующие NSCoding в NSUserDefaults), относящиеся к предпочтениям или другой информации. Используйте NSUserDefaults для хранения информации о состоянии. Одно предостережение - вы не должны использовать NSUserDefaults для хранения больших объемов данных, так как это замедлит время запуска вашего приложения (так как значения загружаются при запуске).
-
Более конкретно для вашего случая... если все, что вы хотите сделать, это сохранить выбранную вкладку между приложением, вы должны реализовать
applicationWillTerminate:
и использовать NSUserDefaults для хранения выбранного индекса табуляции. Затем в вашей реализацииapplicationDidFinishLaunching:
вы проверите наличие ключа NSUserDefaults и установите выбранный индекс UITabBarController на сохраненное значение, если оно существует. -
Если вы хотите восстановить, например, стек навигации выбранной вкладки, тогда вам нужно будет хранить достаточно информации, чтобы можно было точно восстановить навигационный стек. Какую информацию, которую вы должны хранить в NSUserDefaults, трудно количественно оценить в общем смысле, поскольку она очень специфична для структуры вашего приложения и возможных итераций иерархии диспетчера представлений в стеке навигации.
-
Если вам нужно восстановить более общий стек навигации, включая, возможно, введенные пользовательские данные, которые вы не хотите потерять при закрытии приложения (например, если пользователь создает новую запись какого-либо типа), Я бы посоветовал вам отвлечь внимание от хранения состояния приложения на уровне делегата приложения и вместо этого сосредоточиться на том, чтобы ваши классы контроллеров просмотра прослушивали
UIApplicationWillTerminateNotification
и выполняли свою собственную экономию состояния. Вам также необходимо будет определить какой-то механизм для использования этой информации, сохраненной на контроллере представления при завершении, для восстановления иерархии навигации. Это более сложный метод, который может не понадобиться в зависимости от ваших потребностей.
К сожалению, этот ответ немного туманный, особенно для более общих и сложных случаев, потому что, как я уже сказал, нет общего решения для этого вопроса, поскольку он так сильно зависит от вашей структуры приложения.
Вот пример использования NSUserDefaults: http://robertcarlsen.net/2009/06/19/overly-simplistic-saving-state-in-of-for-iphone-847