设置和保存UISwitch值错误

时间:2017-08-29 11:20:02

标签: swift xcode uiswitch

我的问题是,一旦您离开设置页面,我在设置页面中的UISwitch会一直恢复到关闭状态,这意味着无法正常使用该开关。我做了一些搜索,发现了这个问题和答案: How do i keep UISwitch state when changing ViewControllers?

我阅读了这个页面并添加了我的代码的答案:

@IBOutlet weak var NumSwitch: UISwitch!

override func viewDidLoad() {
    super.viewDidLoad()
    NumSwitch.isOn = UserDefaults.standard.bool(forKey: "switchState")
    // Do any additional setup after loading the view, typically from a nib.
}


@IBAction func SaveSwitchPressed(_ sender: UISwitch) {
    UserDefaults.standard.set(sender.isOn, forKey: "switchState")
}

然而,当我运行此代码时,我得到:

Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP,subcode=0x0)

(突出显示这一行:'NumSwitch.isOn = UserDefaults.standard.bool(forKey:“switchState”)')

[我正在使用Xcode 8.2.1]

我已将两个UIViewControllers连接到一个ViewController类,因此可能会导致问题。我已经尝试了许多其他方法来使我的开关正常工作,这个方法似乎对其他人有用。有什么明显的我做错了吗?

[我本来希望将此作为对上述问题的评论添加,但我没有这样做的声誉]

1 个答案:

答案 0 :(得分:-1)

如果所有内容都正确连接到您的插座,则以下内容应该有效:

@IBOutlet weak var NumSwitch: UISwitch!

override func viewDidLoad() {
    super.viewDidLoad()
    let isOn = UserDefaults.standard.bool(forKey: "switchState")

    // If the below statement prints `nil` this is what's causing the crash
    print(NumSwitch)

    NumSwitch.setOn(isOn, animated: false)
}


@IBAction func SaveSwitchPressed(_ sender: UISwitch) {
    UserDefaults.standard.set(sender.isOn, forKey: "switchState")
}

错误Thread 1: EXC_BAD_INSTRUCTION(code=EXC_1386_INVOP,subcode=0x0)通常意味着您尝试强制解包可选值。如果NumSwitchnil,则代码中唯一可能导致此问题的是。

我还建议不要用大写字母命名你的财产,因为这可能会产生误导。大写的名称通常用于表示声明的类型/类/结构等。