Странное поведение NSUserDefaults
Пока мое приложение для iPhone работает, я храню некоторые данные (NSStrings) в NSUserDefaults. Я храню рекорд для игры просто к вашему сведению. Когда я дважды нажимаю кнопку "Домой" и убиваю приложение, значения, которые я сохраняю в NSUserDefaults, часто отсутствуют при перезапуске приложения. Почему это происходит?
Код, который я использую, работал нормально во всех предзадачных ОС (3.0 и т. Д.). Из чтения / поиска в сети это выглядит как выполнение [NSUserDefaults standardUserDefaults] синхронизации]; мог бы помочь. Какие-нибудь мысли?
Спасибо!
3 ответа
Убивая приложение с панели задач, когда оно приостановлено, просто отправляет ему сообщение SIGKILL; не происходит постепенного отключения.
Если вы работаете в фоновом режиме, а затем убиваете приложение, вы можете не синхронизировать пользовательские настройки по умолчанию (записанные на диск) до того, как приложение умрет, что обычно происходит само по себе по внутреннему таймеру, но если вы записали значения по умолчанию и затем вещь приостанавливается до того, как произойдет автосинхронизация, что может объяснить это поведение.
Поместите это (как вы заметили):
[[NSUserDefaults standardUserDefaults] synchronize];
в вашем -applicationDidEnterBackground
обработчик в приложении делегат. Таким образом, даже если приложение умирает или убивается, пока оно находится в фоновом режиме, вы знаете, что значения по умолчанию были записаны.
В качестве защитной практики я обычно явно вызываю синхронизацию на объекте по умолчанию каждый раз, когда пишу состояние, которое считаю критически важным.
Где вы вызываете метод -synchronize? Обращаете ли вы внимание на сообщения делегата приложения, отправленные ОС, которые сообщают, что ваше приложение скоро закроется?
Я не уверен, что это так, но ты звонил? [[NSUserDefaults standardUserDefaults] registerUserDefaults:...]
?