NSUserDefauls BOOL值未在iOS中设置

时间:2013-07-18 22:12:35

标签: ios

虽然NSUserDefaults的代码看起来很简单,但我无法使其正常工作。

我有一个settingViews,用户可以在其中禁用声音。这是我的代码:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view from its nib.
    self.soundSettings.font = [UIFont rw_snapFontWithSize:24.0f];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if([defaults objectForKey:@"stateForSoundSwitch"]) {
        NSLog(@"Sound is ON");
        self.soundStatus.on=YES;
    } else {
        self.soundStatus.on=NO;
        NSLog(@"Sound is OFF");
    }
}

- (IBAction)soundSwitchChanged:(id)sender
{
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if (self.soundStatus.on) {
        NSLog(@"Sound is enabled");
        [defaults setBool:true forKey:@"stateForSoundSwitch"];
    }
    else {
        NSLog(@"Sound is disabled");
        [defaults setBool:false forKey:@"stateForSoundSwitch"];
    }
    [defaults synchronize];

}

但即使我将开关更改为FALSE,每次登录设置屏幕时,该值都为TRUE。我错过了什么?

1 个答案:

答案 0 :(得分:1)

setBool:forKey:期望一个BOOL。尝试使用YES或NO而不是true或false(类型为bool,小写)。

此外,您应该使用boolForKey而不是objectForKey来访问它。

如果您曾在NSUserDefaults中设置对象,那么您的逻辑测试将始终为YES,因为您正在有效地测试密钥是否存在(即不是nil),而不是它是否实际设置为YES / NO。

换句话说,改变:

if ([defaults objectForKey:@"stateForSoundSwitch"]) {

到此:

if ([defaults boolForKey:@"stateForSoundSwitch"] == YES) {