致命错误:在检索默认值时解除可选值时意外发现nil

时间:2014-09-30 05:55:20

标签: ios swift settings.bundle user-preferences

我是iOS编程的新手,我试图从用户默认值中获取值。 我有一些偏好,我试图在viewDidLoad()函数中的视图controller.swift上获取它们。

这是我的代码:

    override func viewDidLoad() {
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.

    var defaults: NSUserDefaults = NSUserDefaults.standardUserDefaults()
    let strName : NSString = defaults.objectForKey("name_preferences") as NSString
    let strEmail : NSString = defaults.objectForKey("mail_preferences") as NSString
    let strUser : NSString = defaults.objectForKey("user_preferences") as NSString

让strName崩溃,告诉我:"fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)"我原以为是因为没有任何默认值,所以我输入了它。但它仍然失败。 任何人都可以帮助我吗?

1 个答案:

答案 0 :(得分:1)

这意味着在您的用户默认值中找不到strName。 试试这个:

let var0 = defaults.objectForKey("key0") as? NSString 
let var1 = defaults.objectForKey("key1") as? NSString 
let var2 = defaults.objectForKey("key2") as? NSString //... and so on
if let strName = var0 {
   //use strName
}
if let strEmail = var1 {
   //use strEmail
}

如果所有这些必须存在于用户默认值中,以使代码正常运行,则可以嵌套if let检查。如果没有,您应该对那些可以为nil的值使用条件。

您应该对用户默认设置中的所有内容执行此操作,因为您无法确定密钥的对象类型始终是正确的。

编辑:

说明:as关键字用于类型转换。 你可以阅读它here

as?强制转换为可选项,因此如果使用as?将值转换为类型,则代码仍然有效,如果值为nil或无法转换。您可以稍后使用if let语句检查选项,以查看它们是否为零或包含值。