Как определить, было ли приложение iPhone запущено в фоновом режиме или нет
Мое приложение использует NSUserDefaults для хранения некоторых значений, чтобы оно могло восстановить их при обновлении приложения или при отключении фоновой обработки. Фоновая обработка автоматически сохраняет мои целочисленные значения, но если пользователь выходит из приложения из панели запуска, числа также теряются, и метод ViewDidUnload, который, я полагаю, не вызывает при входе в фоновый режим. Есть ли способ, которым я могу сохранить NSUserDefaults каждый раз, когда приложение выгружается. Кроме того, метод ViewDidLoad имел ту же проблему, он не вызывает фоновой обработки. Как обойти это?
PS Пока единственное, что нужно сохранить моему приложению, это int для подсчета на экране.
ОБНОВЛЕНИЕ: UIApplicationDidEnterBackgroundingNotification прекрасно работает с вашими предложениями!
2 ответа
Вы не можете сохранить данные прямо до того, как они в конечном итоге будут уничтожены, но вы можете сохранить состояние "на всякий случай" в вашем applicationDidEnterBackground: делегат приложения.
Также есть applicationDidBecomeActive:, но нет никакой причины загружать ваши сохраненные данные оттуда, так как, когда они вызываются из приложения, которое было в фоновом режиме, данные будут сохранены любым способом.
Вы не можете сказать, было ли ваше приложение запущено из фона или нет, по крайней мере, как оно настроено в настоящий момент, так как ваш делегат приложения получит ту же последовательность событий, если оно будет запущено из трамплина.
Как говорит Joost, вы должны сохранить все необходимое для восстановления состояния внутри обратного вызова applicationDidEnterBackground; по сути, вы должны предположить, что это последнее сообщение, которое получит ваше приложение, прежде чем оно будет безжалостно убито злым жнецом процесса.
Вам следует ознакомиться с видеороликами сессий WWDC 2010, в частности сессией 105 "Принятие многозадачности на iPhone OS, часть 1", для подробного объяснения.