Swift 敏捷的UserDefaults和UISwitch
我试图让UserDefaults使用UISwitch,但是当我强制关闭应用程序并重新打开它时,开关状态没有保存 更新:开始工作了。即使应用程序关闭,开关状态仍将保持在“开”或“关”状态 我的代码:Swift 敏捷的UserDefaults和UISwitch,swift,nsuserdefaults,uiswitch,Swift,Nsuserdefaults,Uiswitch,我试图让UserDefaults使用UISwitch,但是当我强制关闭应用程序并重新打开它时,开关状态没有保存 更新:开始工作了。即使应用程序关闭,开关状态仍将保持在“开”或“关”状态 我的代码: let defaults = UserDefaults.standard @IBAction func switchAction(_ sender: UISwitch) { defaults.set(true, forKey: "saveTrue")
let defaults = UserDefaults.standard
@IBAction func switchAction(_ sender: UISwitch) {
defaults.set(true, forKey: "saveTrue")
defaults.set(false, forKey: "saveFalse")
if sender.isOn == false {
sender.setOn(defaults.bool(forKey: "saveFalse"), animated: true)
} else if sender.isOn == true {
sender.setOn(defaults.bool(forKey: "saveTrue"), animated: true)
}
}
回答:
let defaults = UserDefaults.standard
override func viewDidLoad() {
super.viewDidLoad()
if let switchValue = getSwitchValue(), switchValue {
switchOutlet.setOn(true, animated: true)
} else {
switchOutlet.setOn(false, animated: true)
}
}
@IBAction func Switch(_ sender: UISwitch) {
if sender.isOn == false {
setSwitchStatus(status: false)
sender.setOn(false, animated: true)
} else if sender.isOn == true {
setSwitchStatus(status: true)
sender.setOn(true, animated: true)
}
}
func setSwitchStatus(status: Bool?) {
if status != nil {
defaults.set(status, forKey: "save1")
}
}
func getSwitchValue() -> Bool? {
return defaults.bool(forKey: "save1")
}
我不确定这是否是您想要的,但我会这样做:
let defaults=UserDefaults.standard
@我的开关:我的开关!
//或“应用程序重新打开时”调用的任何其他函数
覆盖函数ViewDidDisplay(){
self.mySwitch.setOn(defaults.bool(forKey:“switchDefaultsKey”),动画:true)
}
@iAction func switchAction(\发送方:UISwitch){
defaults.set(sender.isOn,forKey:“switchDefaultsKey”)
}
我不明白你想做什么。您的发送者.setOn
代码不会更改任何内容。您正在设置setOn=false
,而它已经是false
。脱离主题,但您可以只执行if sender.isOn{…}else{…}
或使用三元运算符或使用.isOn设置true或false,而不是比较true和false。.setOn使开关处于ON或OFF状态。我的目标是使用UserDrfaults将UISwitch的状态保存在内存中。因此,如果应用程序在UISwitch处于打开状态时关闭,那么当应用程序重新打开时,它将保持这种状态。我已经解决了问题。在最初的问题正文中说明了这一点。此外,在ViewDidAspect func中,“defaults.setOn”将不起作用