2010-11-03 1 views
1

У меня есть приложение, написанное под OS 3.x - тогда оно отлично работало. С момента восстановления для ОС 4.1 он больше не работает в отношении загрузки настроек приложения.NSUserDefaults не загружается в IOS4

У меня есть файл root.plist в комплекте с приложением. Некоторые из настроек по умолчанию уже установлены там, редактируя файл, то есть имя хоста, время ожидания и т. Д. Новый пользователь должен предоставить некоторые учетные данные для входа, чтобы они оставались пустыми. Когда приложение запускается в первый раз, оно обнаруживает недостающие учетные данные и завершает работу, прося пользователя перейти к настройкам и ввести учетные данные. Если я открываю настройки, я вижу, чего я ожидаю; имя хоста, время ожидания и другие значения по умолчанию, как в root.plist. Я ввожу имя пользователя и пароль, а также еще один идентификационный код. Когда я перезапускаю приложение, я возвращаю значения для данных, которые я только что нажал, плюс BOOL protocolswitch = 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, кто-нибудь понимает изменения в поведении? Любой способ исправить это? Cheers,

Sarge62.

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

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

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

+0

случилось со мной тоже начал падать обратно в словарь «расфасованные» по умолчанию при ноль встречается – slf

+1

просто представил Bug ID # 9908757 об этом – slf

ответ

1

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

, например

+ (void)initialize { 
NSMutableDictionary *defaultValues = [NSMutableDictionary dictionary]; 
[defaultValues setObject:@"defaultHostname" forKey:@"hostname"]; 
[[NSUserDefaults standardUserDefaults] registerDefaults:defaultValues]; 
} 
+0

Благодаря гориллы, но я не Думаю, это так. Я знаю, что вы имеете в виду. У меня есть другой код в приложении 4.1, который делает это - он читает файл root.plist и записывает содержимое этого словаря назад, если он определяет, что значения по умолчанию не существуют. – Sarge62

+0

ThinK Я нашел причину - см. Отредактированный пост. – Sarge62

+0

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