即使重新启动应用程序也保存UISwitch状态

时间:2019-02-04 00:58:29

标签: ios objective-c swift iphone cocoa-touch

我试图将switch语句保存在Objective-c中,但是每当我重新打开应用程序或转到另一个页面并返回到具有switch的页面时,它将返回默认状态(关闭)。

@property (strong, nonatomic) IBOutlet UISwitch *switch1;
@property (strong, nonatomic) IBOutlet UISwitch *switch2;
@property (strong, nonatomic) IBOutlet UISwitch *switch3;

我有3个开关,并且有3个IBOutlet。我尝试了一些代码来保存状态,但是没有用。我如何让他们工作?

2 个答案:

答案 0 :(得分:1)

您需要做两件事:

1:保存更改后的开关状态:

-(IBAction) switchChanged:(UISwitch *)sender {
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setBool:sender.isOn forKey:@"MySwitch"];
}

2:在加载视图控制器时获取开关的状态:

-(void) viewDidLoad {
    [super viewDidLoad];
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    switch1.isOn = [defaults boolForKey:@"MySwitch"];
}

答案 1 :(得分:0)

您可以通过在本地存储它们的状态并在每次显示UISwitch时检查存储的值来解决此问题。

快捷键4:

UserDefaults.standard.set(<#Switch#>.isOn, forKey: "switch_name_here")

let value = UserDefaults.standard.value(forKey: "switch_name_here")

// Then you compare if value == true and set <#Switch#>.isOn = /* stored state */

目标C:

NSString *valueToSave = @"YES"; // or "NO" if switch is off.
[[NSUserDefaults standardUserDefaults] setObject:valueToSave forKey:@"switch_name_here"];
[[NSUserDefaults standardUserDefaults] synchronize];

NSString *savedValue = [[NSUserDefaults standardUserDefaults] stringForKey:@"switch_name_here"];

// Then you compare to "YES" or "NO" and set [<#Switch#> setOn: /* stored state */]

注意:

获取存储的值后,将更新UISwitch状态。如果您具有登录/注册系统,或者要在多个设备中更新此数据,则应该远程存储它们的值。