在我的代码中,我通过 NSUserDefaults
存储了 UISwitch
状态。但是,当窗口重新加载时,所有 UISwitch 的
都会打开。这是我的代码片段:
@IBAction func switchState(sender: AnyObject) {
let standardDefaults = NSUserDefaults.standardUserDefaults()
if mySwitch.on{
standardDefaults.setObject("On", forKey: "switchKey")
}
else{
standardDefaults.setObject("Off", forKey: "switchKey")
}
standardDefaults.synchronize()
}
override func awakeFromNib() {
super.awakeFromNib()
let standardDefaults = NSUserDefaults.standardUserDefaults()
self.mySwitch.on = standardDefaults.stringForKey("switchKey") == "On"
}
我相信它在 awakeFromNib
部分,但我无法弄清楚。请帮忙。
谢谢。
最佳答案
您的实现中存在冗余代码。您可以直接将 bool
保存在 NSUserDefaults
中,而不是存储 String
并稍后对其进行操作。
这是你应该做的:
保存数据时:
@IBAction func switchState(sender: AnyObject) {
NSUserDefaults.standardUserDefaults().setBool(mySwitch.on, forKey: "switchKey")
}
检索数据时:
override func awakeFromNib() {
super.awakeFromNib()
self.mySwitch.on = NSUserDefaults.standardUserDefaults().boolForKey("switchKey")
}
此外,值得注意的是 NSUserDefaults
开始时为空,因此请求 key 返回 nil
,并在 上调用
返回 boolValue
nilfalse
。如果您希望您的开关以默认值开始,您可以在 appDidFinishLaunching
中实现:
NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true])
关于ios - UISwitch 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314463/