NSUserDefaults не загружается в IOS4 - PullRequest
1 голос
/ 03 ноября 2010

У меня есть приложение, которое было написано под OS 3.x - тогда оно работало нормально. После перекомпоновки для OS 4.1 он больше не работает с загрузкой настроек приложения.

У меня есть файл root.plist, связанный с приложением. Некоторые настройки по умолчанию уже установлены там путем редактирования файла, то есть имени хоста, времени ожидания и т. Д. Новый пользователь должен предоставить некоторые учетные данные для входа в систему, чтобы они оставались пустыми. Когда приложение запускается в первый раз, оно обнаруживает отсутствующие учетные данные и закрывается, предлагая пользователю перейти в «Настройки» и ввести учетные данные. Если я открываю настройки, я вижу то, что ожидаю; имя хоста, время ожидания и другие значения по умолчанию, как они были в root.plist. Я ввожу имя пользователя и пароль, а также еще один идентификационный код. Когда я перезапускаю приложение, я получаю значения обратно для данных, которые я только что ввел, плюс BOOL protocolwitch = YES (который я не изменил). Все остальные значения возвращают ноль, несмотря на то, что отображаются в настройках.

username   = [[NSUserDefaults standardUserDefaults] stringForKey:@"name_preference"];
password   = [[NSUserDefaults standardUserDefaults] stringForKey:@"password_preference"];
CRMID      =  [[[[NSUserDefaults standardUserDefaults] stringForKey:@"userID_preference"]uppercaseString] retain];
hostname   = [[NSUserDefaults standardUserDefaults] stringForKey:@"hostname_preference"];
protocolSwitch = [[NSUserDefaults standardUserDefaults] boolForKey:@"http_preference"];
timeout    = [[NSUserDefaults standardUserDefaults] doubleForKey:@"timeout_preference"];
portNumber = [[NSUserDefaults standardUserDefaults] integerForKey:@"port_preference"];
bccEmail   = [[NSUserDefaults standardUserDefaults] stringForKey:@"bcc_email_preference"];
locationOn = [[NSUserDefaults standardUserDefaults] boolForKey:@"location_preference"];

Я знаю о «синхронизации», но на самом деле я не изменяю эти значения из своего приложения, поэтому не вижу, как это применимо здесь. Я также убедился, что приложение не работает в фоновом режиме перед перезапуском, без разницы. До OS4 все работало отлично, кто-нибудь понимает изменение поведения? Есть ли способ это исправить? Ура,

Sarge62.

Определенно что-то не так с результатом настроек. Выгрузив ключи словаря на консоль при запуске приложения, я вижу это:

"location_preference",
NSInterfaceStyle,
AppleLanguages,
"userID_preference",
AppleKeyboardsExpanded,
AppleLocale,
AppleKeyboards,
NSLanguages,
"http_preference",
"password_preference",
"name_preference"

В листе указано только пять ключей! Если я зайду в настройки и изменю имя хоста на что-то отличное от того, которое было в plist по умолчанию, оно появится в журнале выше. Похоже, что на экране «Настройки» есть ошибка (?), Которая регистрирует только ключи, которые изменены с исходного значения по умолчанию (по крайней мере для строковых объектов, BOOLS в порядке).

1 Ответ

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

Вы зарегистрировали значения по умолчанию?Обычно это делается в методе класса + (void) initialize делегата приложения.

, например

+ (void)initialize {
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary];
[defaultValues setObject:@"defaultHostname" forKey:@"hostname"];
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...