应用程序首次启动时 NSUserDefaults 键初始化

NSUserDefaults key initialization when app starts for the first time

如果我第一次启动应用程序,NSUserDefaults 的布尔键是 nil 并且应用程序在尝试 if 中的设置状态时崩溃]-陈述。

我尝试按如下方式初始化 viewDidLoad() 中的密钥,但密钥似乎未定义:

let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.objectForKey("fasterDemo") != nil) {
    defaults.setBool(true, forKey: "fasterDemo")
}

可以通过切换第二个视图来更改 fasterDemo 键。故事板中的视图由 ViewController.swift 中的两个 类 控制。 附加代码,我在其中尝试读出状态作为计时器的参数。

let demo = defaults.stringForKey("fasterDemo")
var timerSpeed: Double = 1

if (demo! == "1") {
    timerSpeed = 0.001
}
else {
    timerSpeed = 1
}

timer = NSTimer.scheduledTimerWithTimeInterval(timerSpeed, target: self, selector: Selector("countdownTimer"), userInfo: nil, repeats: true)

我在 Xcode 方面不是很有经验(不是说:我是初学者)。 感谢您的支持!

你的逻辑测试 != nil 是错误的方法 - 如果它是 == nil 你想设置默认值。

无论如何,您应该做的是在应用程序启动时使用 registerDefaults: 设置完整的默认值字典。如果这些值已经设置为明确的内容,那么它们将不会更新,如果不是,那么注册的默认值是供应用程序使用的临时(未保存/同步)设置。

试试这个,

let defaults = NSUserDefaults.standardUserDefaults()
if (defaults.objectForKey("fasterDemo")) {//no need to use '==nil'
    defaults.setBool(true, forKey: "fasterDemo")
}

并且

let demo = defaults.boolForKey("fasterDemo")
var timerSpeed: Double = 1

if (demo) {//same as 'demo == true'
    timerSpeed = 0.001
}
else {
    timerSpeed = 1
}

timer = NSTimer.scheduledTimerWithTimeInterval(timerSpeed, target: self, selector: Selector("countdownTimer"), userInfo: nil, repeats: true)

请注意 stringForKey 已替换为 boolForKey