У меня есть приложение, которое было написано под 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 в порядке).