这应该将两个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"];
}
答案 0 :(得分:1)
如果您使用的是UISwitch,则应设置on
属性,而不是selected
。
setBeadVibrator.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"beadSwitchStatus"];
setDecadeVibrator.on = [[NSUserDefaults standardUserDefaults] boolForKey:@"decadeSwitchStatus"];
答案 1 :(得分:1)
NSUserDefaults只能存储NSData,NSString,NSNumber,NSDate,NSArray或NSDictionary类型的对象。因此,我建议您将交换机的状态放在NSString中,并将该字符串放在NSUserDefaults中。与从NSUserDefaults检索信息时相比,可以使用if语句再次设置布尔值。
答案 2 :(得分:0)