Swift 2 - Array - 在展开Optional值时意外发现nil

时间:2015-11-04 21:28:18

标签: arrays swift2

如果数组为空,如何防止我的应用崩溃?

var UserVideosInfo = [[String]]()

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

如果数组为空userVideosInfo崩溃说:

  

致命错误:在解包可选值时意外发现nil

我试过了:

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

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

3 个答案:

答案 0 :(得分: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
    }
}

答案 1 :(得分:0)

您可以通过注册Apple推荐的键/值对来阻止它。

在AppDelegate中尽快添加

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

好处是UserVideos永远不会是nil然后你可以安全地写

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

请阅读有关在documentation

中注册默认值的部分

答案 2 :(得分:-1)

如果我使用应用程序下方的代码,则不会崩溃

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