UISwitch无法正常工作

时间:2015-10-24 04:10:10

标签: ios swift uitableview cocoa-touch swift2

在我的代码中,我通过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部分,但我无法理解。请帮忙。

谢谢。

3 个答案:

答案 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")

我希望它有所帮助。