这是问题,我从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>
答案 0 :(得分:1)
对于BOOL
变量,如果希望它为NO
,则无需设置任何值。因为当你第一次尝试访问它时它会返回相同的内容。因此,请从registerDefaults
方法中删除applicationDidFinishLaunchingWithOptions
代码(全部四行)。
<强>解释强>
当您将设置从NO
更改为YES
并启动应用程序时,在applicationDidFinishLaunchingWithOptions
中,此值将以编程方式更改为“否”。
注意:每当您在应用程序中使用设置包时,在注册值之前(对象值,因为基本类型将返回0)检查该值是否为nil(表示仍未注册),如果key的值为nil,则只注册初始默认值,否则每次以编程方式更改值。
谢谢,