从NSUserDefaults加载UISwitch的状态



我已经设法改变我的UISwitch的状态并保存到NSUserDefaults

我的UISwitch是从主视图不同的视图,当我在视图之间翻转,我的UISwitch按钮总是出现ON,即使状态可能是OFF。

- (IBAction)truthonoff:(id)sender {
    if(_truthonoff.on) {
        // lights on
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:@"yes" forKey:@"truthonoff"];
        [defaults synchronize];
        self.status.text = @"on";
    }
    else {
        NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
        [defaults setValue:@"no" forKey:@"truthonoff"];
        [defaults synchronize];
        self.status.text =@"off";
    }
}

我是这样在第二个视图控制器中加载按钮的

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
self.text.text=[defaults objectForKey:@"truthonoff"];

我如何确保UISwitch状态代表NSUserDefaults中的值(即,当它是OFF时,它显示为OFF,当ON显示为ON)?

试试这个:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[self.valueSwitch setOn:[[defaults objectForKey:@"truthonoff"] boolValue] animated:YES];
[self.valueSwitch addTarget:self action:@selector(stateSwitched:) forControlEvents:UIControlEventValueChanged];

stateSwitched中:

-(void)stateSwitched:(id)sender {
    UISwitch *tswitch = (UISwitch *)sender;
    NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
    [defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
    [defaults synchronize];
}

希望这对你有帮助。:)

有点晚了,但是你没有按照你接受的答案去做:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setObject: tswitch.isOn ? @"YES" : @"NO" forKey:@"truthonoff"];
[defaults synchronize];

正确的方式是:

NSUserDefaults *defaults =[NSUserDefaults standardUserDefaults];
[defaults setBool:tswitch.isOn forKey:@"truthonoff"];
[defaults synchronize];

这样可以避免检查布尔值,因为NSUserDefaults可以取boolean的值。

也更容易检索布尔值:

bool truthonoff = [defaults boolForKey:@"truthonoff"];

阅读更多关于boolForKey

的信息

将您的UISwitch连接到ViewController中的IBOutlet

[mySwitch setOn:TRUE animated:TRUE];

方法引用