Как получить обновление NSUserDefault на iOS 4? - PullRequest
9 голосов
/ 07 июля 2010

Я занимаюсь разработкой приложения для iPhone, у меня возникла проблема на iOS4 из-за многозадачности.

Это приложение имеет настройки по умолчанию, определенные в файле Settings.bundle.Если я запускаю свое приложение, то я оставляю его (поэтому оно уходит в фоновом режиме).Я изменю настройки и перезапущу приложение (оно выходит из режима ожидания и вызывается метод: applicationDidBecomeActive ()).

Значения в NSUserDefault - это не обновления, а выход из приложения и повторный запуск.Значения хорошие.

Кто-то испытывает ту же проблему, что и я?Что я делаю не так?

Спасибо за ваш совет / помощь.

Ответы [ 2 ]

20 голосов
/ 07 июля 2010

У меня была та же проблема, что и у вас, и я обошел ее, позвонив

[[NSUserDefaults standardUserDefaults] synchronize];

в applicationDidBecomeActive.

По какой-то причине объект [NSUserDefaults standardUserDefaults], к которому вы можете получить доступприложение не синхронизируется с реальными файлами plist, поддерживающими его, когда приложение снова становится активным после его приостановки.Вызов метода synchronize вызывает синхронизацию.

3 голосов
/ 07 июля 2010

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

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(settingsChanged) name:NSUserDefaultsDidChangeNotification object:nil];

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

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

...