Как убедиться, что настройки NSUserDefaults сохраняются на диск при выходе из приложения? - PullRequest
4 голосов
/ 24 сентября 2010

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

Это происходит: когда настройка изменяется в NSUserDefaults и нажата кнопка home,домашний экран становится видимым.приложение все еще работает в фоновом режиме.Затем я дважды нажимаю кнопку «Домой» и удаляю приложение из диспетчера задач.Приложение сейчас действительно вышло.Затем я нажимаю значок приложения, чтобы запустить его снова.Вуаля: Настройки не сохраняются!неправильно, старое значение!

Но когда я это сделаю, это сработает: нажмите кнопку «Домой», снова нажмите значок приложения, снова нажмите кнопку «Домой» и СЕЙЧАС дважды нажмите кнопку «Домой» и убейте приложение.Нажмите значок еще раз.Теперь приложение показывает правильные настройки.

Я никогда не сохранял явным образом NSUserDefaults, поскольку он всегда работал нормально.Но теперь iOS, кажется, не достаточно умна, чтобы делать это автоматически ... есть ли что-нибудь, что я могу вызвать в любом из этих методов "приложение выйдет сейчас" в делегате приложения, так что действительно сохраняется слово NSUserDefaults?

1 Ответ

9 голосов
/ 24 сентября 2010

NSUserDefaults изменения сохраняются при отправке сообщения synchronize:

[[NSUserDefaults standardUserDefaults] synchronize];

Система вызывает это автоматически только тогда, когда приложение закрывается. Система также вызывает это каждые несколько секунд, поэтому происходит заметная задержка при просмотре сохраненных настроек.

В iOS 4 приложение на самом деле не полностью завершается (иначе говоря, выход), если вы позволяете ему поддерживать многозадачность. Если вы все равно хотите поддерживать многозадачность, а также хотите, чтобы пользовательские настройки сохранялись, когда приложение покидает передний план, вы можете вызвать указанное выше сообщение в applicationDidEnterBackground: вашего делегата приложения, например:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    [[NSUserDefaults standardUserDefaults] synchronize];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...