我是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
语句检查选项,查看它们是否为零或包含值。