Настройка Bundle не выводит правильное значение - PullRequest
0 голосов
/ 03 марта 2012

Вот в чем проблема, я запускаю свое приложение из XCode, оно запускается и запускается, затем я переключаюсь на settings.app и меняю переключатель с NO на YES, а когда я переключаюсь обратно в свое приложение, клавиша выводит NO, а не YES.

Я думаю, что я работаю против приведенной ниже цитаты, но не уверен, как обойти это, если пользователь запускает приложение и переходит к настройкам и изменяет переключатель, теперь он не синхронизирован, потому что выводит Settings.app при первом запуске в NO. Не имеет смысла, что пользователь не может изменить настройку при первом переключении на settings.app

"Для вновь установленных приложений значения предпочтений по умолчанию из комплекта параметров приложения не устанавливаются до тех пор, пока не будет запущено приложение настроек. Это означает, что если пользователь запускает ваше приложение до запуска настроек, значения по умолчанию, указанные в вашем комплекте настроек, будут недоступны. «

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
NSDictionary *appDefaults = [NSDictionary dictionaryWithObject:@"NO" forKey:@"hideActionBar"];
[defaults registerDefaults:appDefaults];
[defaults synchronize];

и затем код, который я использую, чтобы проверить его

- (void)applicationDidBecomeActive:(UIApplication *)application {
 NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
 BOOL hidden = [defaults boolForKey:@"hideActionBar"];
 NSLog(@"%d",hidden);

if (hidden) {
    viewController.actionButton.enabled = NO;

} else {


    viewController.actionButton.enabled = YES;
}    
}

и мои настройки Root.plist

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"      "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Type</key>
<string>PSToggleSwitchSpecifier</string>
<key>Title</key>
<string>Hide Action Bar</string>
<key>Key</key>
<string>hideActionBar</string>
<key>DefaultValue</key>
<false/>
<key>TrueValue</key>
<true/>
<key>FalseValue</key>
<false/>
</dict>
</plist>

1 Ответ

1 голос
/ 03 марта 2012

Для BOOL переменных вам не нужно устанавливать какое-либо значение, если хотите, чтобы оно было NO.Потому что, когда вы попытаетесь получить к нему доступ в первый раз, он вернет вам то же самое.Поэтому удалите код registerDefaults (все четыре строки) из метода applicationDidFinishLaunchingWithOptions.

Объяснение:

При изменении настройки с NO на YESи запустите ваше приложение, в applicationDidFinishLaunchingWithOptions это значение однажды будет программно изменено на НЕТ.

Примечание: Всякий раз, когда вы используете пакет настроек в своем приложении, до регистрации значения (значения объекта,поскольку примитивные типы будут возвращать 0), проверьте, является ли это значение нулем (это означает, что все еще незарегистрировано), если значение для ключа равно нулю, тогда зарегистрируйтесь только с начальными значениями по умолчанию, иначе вы в конечном итоге будете изменять значения каждый раз программно.

Спасибо

...