Странное поведение NSUserDefaults - PullRequest
2 голосов
/ 08 ноября 2010

Пока работает мое приложение для iPhone, я храню некоторые данные (NSStrings) в NSUserDefaults. Я храню рекорд для игры просто к вашему сведению. Когда я дважды нажимаю кнопку «Домой» и убиваю приложение, значения, которые я сохраняю в NSUserDefaults, часто отсутствуют при перезапуске приложения. Почему это происходит?

Код, который я использую, работал нормально во всех предзадачных ОС (3.0 и т. Д.). При чтении / поиске в сети это выглядит как выполнение [NSUserDefaults standardUserDefaults] синхронизации]; может помочь Есть мысли?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 08 ноября 2010

Убивая приложение с панели задач, когда оно приостановлено, просто отправляет ему сообщение SIGKILL; не происходит постепенного отключения.

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

Поместите это (как вы заметили):

 [[NSUserDefaults standardUserDefaults] synchronize];

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

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

2 голосов
/ 08 ноября 2010

Где вы вызываете метод -synchronize? Обращаете ли вы внимание на сообщения делегата приложения, отправленные ОС, которые сообщают, что ваше приложение скоро закроется?

1 голос
/ 08 ноября 2010

Я не уверен, что это так, но вы звонили [[NSUserDefaults standardUserDefaults] registerUserDefaults:...]?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...