1

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

切换位于我用于设置的视图中。只有两个切换,所以我想使用 NSUserDefaults。切换默认为关闭。我想切换到 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"];

}
4

3 回答 3

1

如果你使用 UISwitch,你应该设置on属性,而不是selected.

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

请参阅UISwitch 类参考

于 2012-07-30T04:31:03.443 回答
1

NSUserDefaults 只能存储 NSData、NSString、NSNumber、NSDate、NSArray 或 NSDictionary 类型的对象。所以,我建议你把开关的状态放在一个 NSString 中,然后把那个字符串放在 NSUserDefaults 中。当您从 NSUserDefaults 检索信息时,您可以使用 if 语句再次设置布尔值。

于 2012-08-07T20:02:27.180 回答
0

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

您可以从Apple doc中了解更多信息。这是一个关于使用 UISwitches的非常详细的网站。

于 2012-07-30T06:12:52.430 回答