【问题标题】:Save UISwitch state even if the app gets restarted即使应用程序重新启动,也保存 UISwitch 状态
【发布时间】:2019-06-27 18:39:52
【问题描述】:

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

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

我有 3 个开关,我有 3 个 IBOutlets 供它们使用。我尝试了一些代码来保存状态,但没有奏效。我怎样才能让它们工作?

【问题讨论】:

  • 您可以使用 NSUserDefaults 将其保存或加载到您的应用数据库中。

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


【解决方案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"];
}

【讨论】:

  • 您好 self.switch.isOn,我在 .switch 上收到一条错误提示“预期标识符”
  • 这只是一个例子;您尚未显示用于保存对开关的引用的属性名称。
【解决方案2】:

您可以通过在本地存储它们的状态并在每次呈现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 状态。如果您有登录/注册系统,或者您希望在多个设备中更新此数据,您应该远程存储它们的值。

【讨论】:

    猜你喜欢
    • 2021-01-09
    • 1970-01-01
    • 1970-01-01
    • 2019-12-05
    • 2014-05-13
    • 2023-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多