Что-то странное происходит с NSUserDefaults при загрузке приложения - PullRequest
4 голосов
/ 16 октября 2011

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

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

Что здесь происходит?Я использую iOS 5, не уверен, что это как-то повлияет на это.Это просто очень раздражает, потому что мое приложение полагается на доступность данных при загрузке.

ПРИМЕЧАНИЕ. Это работает абсолютно нормально после того, как я изменил / повторно выбрал значения в представлении настроек.

1 Ответ

7 голосов
/ 16 октября 2011

Убедитесь, что ваш звонок synchronize после установки значения:

[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"someKey"];
[[NSUserDefaults standardUserDefaults] synchronize];

Изменить, чтобы ответить на комментарии:

Из документации на -registerDefaults::

Содержимое домена регистрации не записывается на диск; вам нужно вызывать этот метод каждый раз, когда ваше приложение запускается . Вы можете поместить файл plist в каталог ресурсов приложения и вызвать registerDefaults: с содержимым, которое вы прочитали из этого файла.

Итак, в -applicationDidFinishLaunching: вы можете зарегистрировать свои Root.plist значения по умолчанию следующим образом:

[[NSUserDefaults standardUserDefaults] registerDefaults:[NSDictionary dictionaryWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"Root" ofType:@"plist"]]];
...