ios - UISwitch 无法正常工作

标签 ios swift uitableview cocoa-touch swift2

在我的代码中,我通过 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 nil 返回 false。如果您希望您的开关以默认值开始,您可以在 appDidFinishLaunching 中实现:

NSUserDefaults.standardUserDefaults().registerDefaults(["switchKey" : true])

关于ios - UISwitch 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33314463/

相关文章:

iphone - 普通 UIViewController 中的 UITableViewController 功能

ios - Swift - 管理静态字符串和常量(如 URL、ID、图像名称等)的最佳方法是什么

iphone - 如何在 IOS 中动态更新 TableView ?

swift 4+ : Issues copying a String to Clipboard using NSPasteboard

swift - 尝试呈现 tableView

ios - 以编程方式添加 subview 后自动调整单元格大小

ios - 在从 UICollectionView 删除单元格之前的项目之后删除动画

ios - 在 iPhone 应用程序中在哪里存储下载的数据?

ios - Swift:异步回调

ios - 无法将 NSAttributedString.DocumentAttributeKey 类型的值转换为 .DocumentReadingOptionKey