简体   繁体   English

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

[英]App is crashing if NSUserDefaults returns nil

I have a situation where key values from NSUserDefaults memory shall be displayed(restored) on pre-view in a storyboard but they are stored(saved) only in the next view controller following the view where they shall be restored. 我有一种情况, NSUserDefaults内存中的键值应在故事板中的预览中显示(恢复),但它们仅存储(保存)在视图之后的视图中。 In case nothing is stored (such as when the app is run for the first time), the app crashes with error as follows when i try to run view with the store key involved. 如果没有存储任何内容(例如第一次运行应用程序时),当我尝试使用涉及的商店密钥运行视图时,应用程序崩溃并出现如下错误。

fatal error: unexpectedly found nil while unwrapping an Optional value 致命错误:在展开Optional值时意外发现nil

Further, the NSUserDefaults are part of switch statement on this pre-view as follows. 此外,NSUserDefaults是此预览视图中switch语句的一部分,如下所示。 Is there anyway to tell system that if store of the key is nil, please display 0. I think it is specifics of Swift, but not clear how to syntax it in this situation. 无论如何告诉系统如果密钥的存储是零,请显示0.我认为它是Swift的细节,但在这种情况下不清楚如何语法。 Appreciate help. 感谢帮助。

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

... ...

Check whether NSUserDefaults value contain any value or not.If not, then set value as: 检查NSUserDefaults值是否包含任何值。如果不是,则将value设置为:

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

Use if let will be able to check whether your object is nil. 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()
    }

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM