2014-09-30 42 views
1

我是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)"我本來是因爲沒有任何缺省值,所以我鍵入它。但它仍然失敗。 任何人都可以幫助我嗎?

+0

你在哪裏輸入了你引用的默認值? – 2014-09-30 06:01:59

回答

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檢查。如果沒有,你應該使用那些可能爲零的值的條件。

您應該對用戶默認設置中的所有內容執行此操作,因爲您無法確定對於您的密鑰總是會有正確類型的對象。

編輯:

說明:as關鍵字被用於類型強制轉換。 你可以閱讀關於它here

as?轉換爲可選項,所以如果您使用as?將值轉換爲類型,則代碼在值爲零或無法轉換時仍然有效。您稍後可以使用if let語句檢查選項,以查看它們是否爲零或包含值。

相關問題