Swift 设置和保存UISwitch值错误

Swift 设置和保存UISwitch值错误,swift,xcode,uiswitch,Swift,Xcode,Uiswitch,我的问题是,一旦您离开设置页面,设置页面中的UISwitch会一直恢复为关闭状态,这意味着无法正确使用开关。我四处搜索,找到了这个问题和答案: 我阅读了本页并在代码中添加了答案: @IBOutlet weak var NumSwitch: UISwitch! override func viewDidLoad() { super.viewDidLoad() NumSwitch.isOn = UserDefaults.standard.bool(forKey: "switchS

我的问题是,一旦您离开设置页面,设置页面中的UISwitch会一直恢复为关闭状态,这意味着无法正确使用开关。我四处搜索,找到了这个问题和答案:

我阅读了本页并在代码中添加了答案:

@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.boolforKey:switchState”

[我使用的是Xcode 8.2.1]

我已将两个UIViewController连接到一个ViewController类,因此可能是这导致了问题。我尝试了许多其他方法使我的开关正常工作,这一个似乎对其他人有效。有没有什么明显的迹象表明我做错了


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

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

@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")
}
错误线程1:EXC_BAD_INSTRUCTIONcode=EXC_1386_INVOP,subcode=0x0通常表示您试图强制展开一个可选值。在代码中唯一可能导致这种情况的是NumSwitch是否为nil


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

检查NumSwitch是否为nil?您好@Mike Alter,我应该怎么做?我对swift和xcodeverify不太熟悉,所以我应该创建一个UI标签?不,检查你的NumSwitch不是NILSON谢谢你的回答,但是,当我使用你的代码覆盖时,让isOn=UserDefaults.standard.boolforKey:switchState NumSwitch.setOnisOn,动画:false我仍然得到线程1:EXC_BAD_INSTRUCTIONcode=EXC_1386_INVOP,子代码=0x0错误,只是这次突出显示了NumSwitch.setOnisOn,动画:false Line看起来你的NumSwitch插座没有正确连接,您是否使用辅助编辑器通过故事板创建了插座?我不完全确定您所说的辅助编辑器是什么意思,但我可以告诉您我是如何连接交换机的。我在情节提要中单击了它,然后将蓝线连接到我的ViewController.swift文件。是的,这是正确的方法。看起来好像出了什么问题,如果NumSwitch是==nil,那么您将得到一个崩溃,并看到您得到的错误。尝试删除@IBOutlet弱var NumSwitch:UISwitch!行并再次添加,看看是否有帮助。此外,当对话框出现时,请将存储设置为强而不是弱。弱出口有时会从内存中解除分配,这也可能导致它重新连接到@IBOutlet弱变量NumSwitch:UISwitch!这次将其更改为@IBOutlet var NumSwitch:UISwitch!正如你所建议的,但是当我运行程序时,我仍然得到了一个错误