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

标签 objective-c ios uiviewcontroller nsuserdefaults uiswitch

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

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

我认为该值已保存,但当我重新进入“设置” View 时它并未应用于开关。

    - (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"];

}

最佳答案

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

关于objective-c - 尝试使用 NSUserDefaults 保存和设置 UISwitch 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11714586/

相关文章:

ios - UITableView 调整内容宽度

iOS - [CLPlacemark 时区] : unrecognized selector iOS 8

ios - 在 UIWebView - iOS 中通过 Javascript 访问 UDID

iOS 推送导航 Controller ,第二个 View 上没有栏

ios - 如何将值从 UIView 的子类传递到 UIViewController 类

c++ - Xcode需要哪些设置才能构建此代码

iphone - 为什么 NSDate 不能使用 < 或 > 进行比较?

ios - 从导航栏中删除操作

ios - 在 UIViewController 前面添加 am UIPageViewController

objective-c - 使用一个 UIViewController 来添加和更新记录是一种好习惯吗?