尝试使用NSUserDefaults保存和设置UISwitch状态

时间:2012-07-30 01:56:32

标签: objective-c ios uiviewcontroller nsuserdefaults uiswitch

这应该将两个UISwitch的值保存到NSUserDefaults,然后根据保存到默认值的值设置加载开关。我已经在这几个小时,但我似乎无法让它工作。任何帮助将不胜感激。

切换位于我用于设置的视图中。只有两个切换,所以我想使用NSUserDefaults。切换默认为OFF。我想切换到ON并保存更改,以便我可以根据切换的值更改用户体验。然后,当用户再次打开设置时,我希望它们显示当前保存的状态。

我认为该值正在保存,但当我重新进入设置视图时,它不会应用于开关。

    - (IBAction)setBeadVibratorBySwitchState:(id)sender
{
    if (setBeadVibrator.selected == YES) {
        NSUserDefaults *beadSettings = [NSUserDefaults standardUserDefaults];
        [beadSettings setBool:NO forKey:@"beadSwitchStatus"];
        [beadSettings synchronize];
    }
    if (setBeadVibrator.selected == NO) {
        NSUserDefaults *beadSettings = [NSUserDefaults standardUserDefaults];
        [beadSettings setBool:YES forKey:@"beadSwitchStatus"];
        [beadSettings synchronize];
    }

    NSLog(@"Bead Executed");
}

- (IBAction)setDecadeVibratorBySwitchState:(id)sender
{
    if (setDecadeVibrator.selected == YES) {
        NSUserDefaults *decadeSettings = [NSUserDefaults standardUserDefaults];
        [decadeSettings setBool:NO forKey:@"decadeSwitchStatus"];
        [decadeSettings synchronize];
    }
    if (setDecadeVibrator.selected == NO){
        NSUserDefaults *decadeSettings = [NSUserDefaults standardUserDefaults];
        [decadeSettings setBool:YES forKey:@"decadeSwitchStatus"];
        [decadeSettings synchronize];
    }

    NSLog(@"Decade Executed");
}

- (void)viewDidLoad
{
    [super viewDidLoad];

    setBeadVibrator.selected = [[NSUserDefaults standardUserDefaults] boolForKey:@"beadSwitchStatus"];
    setDecadeVibrator.selected = [[NSUserDefaults standardUserDefaults] boolForKey:@"decadeSwitchStatus"];

}

3 个答案:

答案 0 :(得分:1)

如果您使用的是UISwitch,则应设置on属性,而不是selected

setBeadVibrator.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"beadSwitchStatus"];
setDecadeVibrator.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"decadeSwitchStatus"];

请参阅UISwitch Class Reference

答案 1 :(得分:1)

NSUserDefaults只能存储NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary类型的对象。因此,我建议您将交换机的状态放在NSString中,并将该字符串放在NSUserDefaults中。与从NSUserDefaults检索信息时相比,可以使用if语句再次设置布尔值。

答案 2 :(得分:0)

我建议您将NSLog语句放在if语句中以查看它们是否真的已保存。如果没有,可能无法使用UIControlEventValueChanged事件正确配置您的UISwitch。

您可以从Apple doc了解更多信息。以下是使用UISwitches的非常详细的website