我的问题是,一旦您离开设置页面,我在设置页面中的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类,因此可能会导致问题。我已经尝试了许多其他方法来使我的开关正常工作,这个方法似乎对其他人有用。有什么明显的我做错了吗?
[我本来希望将此作为对上述问题的评论添加,但我没有这样做的声誉]
答案 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)
通常意味着您尝试强制解包可选值。如果NumSwitch
为nil
,则代码中唯一可能导致此问题的是。
我还建议不要用大写字母命名你的财产,因为这可能会产生误导。大写的名称通常用于表示声明的类型/类/结构等。