为什么NSUserDefaults不能与我的UISwitch一起使用

时间:2011-11-09 18:58:27

标签: iphone objective-c cocoa-touch nsuserdefaults uiswitch

我正在尝试设置一个默认关闭的UISwitch,直到用户打开它为止。但是现在它默认显示为ON。

AppDelegate的didFinishLaunching:

NSString *testValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"pinCodeSwitch"];
if (!testValue) {
    // since no default values have been set, create them here
    [[NSUserDefaults standardUserDefaults] setBool:NO forKey:@"pinCodeSwitch"];
    [[NSUserDefaults standardUserDefaults] synchronize];
} 

VC的viewDidAppear:

UISwitch* testSwitch = [[[UISwitch alloc] init] autorelease];
if ([[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"]) {
    [testSwitch setOn:NO animated:NO];
}
self.pinCodeSwitch = testSwitch;

当UISwitch的值改变时保存BOOL的方法:

- (IBAction)pinCodeSwitchChanged:(id)sender
{
    [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"pinCodeSwitch"];
    BOOL test = [[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"];
}

2 个答案:

答案 0 :(得分:2)

由于您将'pinCodeSwitch'设置为NO,因此无法设置开关。它会跳过if语句。 将其更改为:

if (![[NSUserDefaults standardUserDefaults] boolForKey:@"pinCodeSwitch"]) 

(取消测试),然后开关将关闭。

答案 1 :(得分:1)

您可以在Interface Builder中通过“STATE”值将此值指定为OFF。 然后通过应用此代码保存开关值:

[YourUiSwitch setOn:NO animated:YES];
[[NSUserDefaults standardUserDefaults]setValue:YourUiSwitch forKey:@"youruiswitch"];
[[NSUserDefaults standardUserDefaults]synchronize];

当视图加载时会从默认值加载它,如下所示:`YourUiSwitch =

[[NSUserDefaults standardUserDefaults]valueForKey:@"youruiswitch"];`

祝你好运!