1

我是 iOS 编程的新手,我试图从用户默认值中获取值。我有一些偏好,我正在尝试将它们放在viewDidLoad()函数中的 view 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

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

4

1 回答 1

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关键字用于类型转换。你可以在这里阅读。

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

于 2014-09-30T06:06:14.677 回答