2015-11-04 71 views
-4

如何防止我的應用程序在數組爲空時崩潰?Swift 2 - 數組 - 意外地發現零,同時展開一個可選值

var UserVideosInfo = [[String]]() 

@IBAction func actionBtn(sender: UIButton) { 
userVideoInfo = NSUserDefaults.standardUserDefaults().objectForKey("UserVideos") as! [[String]] 
} 

如果數組是空userVideosInfo崩潰說:

fatal error: unexpectedly found nil while unwrapping an Optional value

我曾嘗試:

if var userVideoInfoArray:[[String]] = UserVideosInfo { 

      userVideoInfoArray = NSUserDefaults.standardUserDefaults().objectForKey("UserVideosJSON") as! [[String]] 
     } 
+0

用作?而不是!看起來陣列不是空的,陣列沒有 – Loc

+0

我不能,Xcode將它標記爲錯誤:「你是否想要使用'!'或'?'?' – SNos

+0

是的,如果我使用'as?'Xcode失敗 – SNos

回答

-1

如果我使用的應用程序下面的代碼它不是崩潰

if self.Videos.count >0{ 
Videos = (NSUserDefaults.standardUserDefaults().objectForKey("Videos") as! [[String]]) 
      } 
0

這個問題似乎是而是與NSUserDefault相關。

當您嘗試使用「UserVideos」鍵檢索對象時,NSUserDefaults可能返回nil。然後它被顯式解開成一個數組,並導致程序崩潰。

請在繼續之前先驗證是否存在userVideoInfo。

var UserVideosInfo: [[String]]? 

@IBAction func actionBtn(sender: UIButton) { 
    userVideoInfoOrNil = NSUserDefaults.standardUserDefaults().objectForKey("UserVideos") 

    if userVideoInfo = userVideoInfoOrNil as! [[String]] { 
     //Do stuff with userVideoInfo 
    } else { 
     //Value is nil 
    } 
} 
+0

它會失敗,說'[[String]]類型的值永遠不能爲零,' – SNos

+0

我編輯了代碼,試試看。 –

0

您可以通過Apple推薦的註冊鍵/值對來阻止它。

在AppDelegate中儘快添加儘可能

let defaults = NSUserDefaults.standardUserDefaults() 
let defaultValues = ["UserVideos" : [[String]]()] 
defaults.registerDefaults(defaultValues) 

的好處是,UserVideos永遠不能nil然後你就可以放心地寫

userVideoInfoArray = NSUserDefaults.standardUserDefaults().objectForKey("UserVideos") as! [[String]] 

請仔細閱讀章節有關在註冊的默認值documentation

相關問題