如果 NSUserDefaults returns nil 应用程序崩溃
App is crashing if NSUserDefaults returns nil
我遇到这样一种情况,NSUserDefaults
内存中的键值应在情节提要中的预览中显示(恢复),但它们仅存储(保存)在它们所在视图之后的下一个视图控制器中应恢复。如果没有存储任何内容(例如当应用程序第一次 运行 时),当我尝试 运行 使用涉及的存储密钥查看时,应用程序崩溃并出现如下错误。
fatal error: unexpectedly found nil while unwrapping an Optional value
此外,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")
...
使用if let
就能检查你的对象是否为nil。
if let score: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints") {
println("\(score)")
}
// is nil
else {
NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
NSUserDefaults.standardUserDefaults().synchronize()
}
检查 NSUserDefaults 值是否包含任何值或 not.If 不包含,然后将值设置为:
var str: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints")
if (str == nil )
{
NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
}
我遇到这样一种情况,NSUserDefaults
内存中的键值应在情节提要中的预览中显示(恢复),但它们仅存储(保存)在它们所在视图之后的下一个视图控制器中应恢复。如果没有存储任何内容(例如当应用程序第一次 运行 时),当我尝试 运行 使用涉及的存储密钥查看时,应用程序崩溃并出现如下错误。
fatal error: unexpectedly found nil while unwrapping an Optional value
此外,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")
...
使用if let
就能检查你的对象是否为nil。
if let score: AnyObject = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints") {
println("\(score)")
}
// is nil
else {
NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
NSUserDefaults.standardUserDefaults().synchronize()
}
检查 NSUserDefaults 值是否包含任何值或 not.If 不包含,然后将值设置为:
var str: AnyObject? = NSUserDefaults.standardUserDefaults().objectForKey("storedDummyEssentialsPoints")
if (str == nil )
{
NSUserDefaults.standardUserDefaults().setObject(self.score, forKey: "storedDummyEssentialsPoints")
}