2010-08-26 4 views
0

Я делаю код состояния miantainance для Iphone os 4.0 с использованием класса NSUserDefault. , когда я нажимаю на кнопку «Домой», а затем нажимаю «Приложение», тогда он работает, но когда я нажимаю на кнопку «Домой», а затем нажимаю кнопку «Создать и запускать», она не работает. Почему это так?Вопрос, связанный с классом NSUserDefault

ответ

2

Когда вы нажимаете кнопку home на iOS 4, приложение не останавливается. Он приостановлен и помещен в фоновое состояние. Состояние пользовательского интерфейса вашего приложения автоматически поддерживается на этом этапе.

Когда вы нажмете на сборку, приложение принудительно завершает работу перед повторным запуском из Xcode.

Я предполагаю, что ваш код для сохранения состояния пользовательского интерфейса находится в методе applicationWillTerminate. Если это так, то ваш код никогда не будет запущен на iOS 4, так как этот метод больше не вызывается (по крайней мере, это тот случай, который я видел из собственного тестирования и из опыта других людей). И в случае, когда приложение принудительно завершает работу (т. Е. По Xcode при запуске и запуске), метод applicationWillTerminate обходит.

Вместо этого вы должны использовать методы applicationDidEnterBackground и applicationWillEnterForeground.

Таким образом, всякий раз, когда приложение основано на фону, оно записывает его состояние в NSUserDefaults, гарантируя, что состояние сохранено до приложение закрывается.

На iOS 4 единственный способ полностью выйти из приложения - использовать многозадачный интерфейс (двойное нажатие кнопки «домой»), которое принудительно завершает работу приложений. Вот почему важно реализовать вышеописанные методы фоновой работы, поскольку они будут гораздо более вероятными для выполнения.

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

+0

Существует также вызов willresignactive (lookup name), который вызывается при нажатии кнопки Home Button. – Jordan

+0

Да, 'applicationWillResignActive' и' applicationDidBecomeActive'. Эти методы также вызывают, когда система прерывает приложение с предупреждением, элементами управления многозадачностью, входящим вызовом и т. Д. Спасибо, что принесли это Иорданию. – Jasarien

+0

+1 Для получения полного ответа. Больше заслуживает. – Abizern

Смежные вопросы