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



我是iOS编程的新手,我试图从用户默认值中获取值。我有一些偏好,我正试图在viewDidLoad()函数中的视图控制器.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

它在let strName中崩溃,建议我:"fatal error: unexpectedly found nil while unwrapping an Optional value (lldb)"应该是,因为没有任何默认值,所以我键入了它。但它仍然失败。有人能帮我吗?

这意味着在用户默认值中找不到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关键字用于类型转换。你可以在这里阅读。

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

最新更新