如果NSUserDefaults返回nil,则应用程序崩溃

时间:2015-03-17 07:33:51

标签: ios cocoa-touch swift

我有一种情况,即NSUserDefaults内存中的键值应在故事板中的预览中显示(恢复),但它们仅存储(保存)在视图之后的下一个视图控制器中恢复。如果没有存储任何内容(例如第一次运行应用程序时),当我尝试使用所涉及的商店密钥运行视图时,应用程序崩溃并出现如下错误。

  

致命错误:在解包可选值时意外发现nil

此外,NSUserDefaults是此预览视图中switch语句的一部分,如下所示。无论如何告诉系统如果密钥的存储是零,请显示0.我认为它是Swift的细节,但在这种情况下不清楚如何语法。感谢帮助。

var dummy: DummyTest! = nil
switch self.lessonNumber {
case 1:
    NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
case 2:
    NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyFoodPoints")
case 3:
    NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyNumbersPoints")

...

2 个答案:

答案 0 :(得分:2)

检查NSUserDefaults值是否包含任何值。如果不是,则将值设置为:

var str: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints")
if (str == nil )
{
    NSUserDefaults.standardUserDefaults().setObject(self.score, forKey:  "storedDummyEssentialsPoints")
}

答案 1 :(得分:1)

使用if let将能够检查您的对象是否为零。

    if let score: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints") {
        println("\(score)")
    }
    // is nil
    else {
        NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
        NSUserDefaults.standardUserDefaults().synchronize()
    }