在我的代码中,我通过UISwitch
存储NSUserDefaults
状态。但是当窗口重新加载时,所有UISwitche's
都会打开。这是我的代码片段:
@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
部分,但我无法理解。请帮忙。
谢谢。
答案 0 :(得分:1)
您的实施中存在冗余代码。您可以直接将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
另外,值得注意的是nil
开始为空,因此要求密钥返回boolValue
,并在nil
上调用false
会返回appDidFinishLaunching
。如果您希望您的交换机以默认值开始,您可以在NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true])
:
{{1}}
答案 1 :(得分:0)
self.mySwitch.on = standardDefaults.stringForKey("switchKey") == "On"
应该是
self.mySwitch.on = (standardDefaults.stringForKey("switchKey") == "On")
答案 2 :(得分:0)
试试这个..
self.mySwitch.on = standardUserDefaults().setBool(true, forKey: "on")
我希望它有所帮助。