【问题标题】:NSUserDefaults key initialization when app starts for the first time应用第一次启动时的 NSUserDefaults 键初始化
【发布时间】:2015-05-01 09:46:42
【问题描述】:

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

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

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

fastDemo 键可以通过第二个视图上的开关进行更改。故事板中的视图在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 方面的经验并不丰富(不是说:我是初学者)。 感谢您的支持!

【问题讨论】:

  • if (defaults.objectForKey("fasterDemo") == nil) *
  • 另外,如果你设置了布尔值,不要读取字符串

标签: ios swift crash initialization nsuserdefaults


【解决方案1】:

试试这个,

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

【讨论】:

  • 我试过boolForKey,但没有运行if-check:demo! == "1":后缀“!”的操作数应该有可选类型;类型是“布尔”。
  • 抱歉,请参阅编辑。您的 if 语句正在检查字符串而不是布尔值
  • 也将 demo! 更改为 demo
  • 非常感谢你,jammycoder! “!”会做什么?此时?
  • ! 显示一个值不能是可选的(nil 值)。更多关于它在这里developer.apple.com/library/ios/documentation/Swift/Conceptual/…我也只是想了解它
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2022-07-12
    • 2016-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-07
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多