'致命错误:在展开可选值时意外发现nil'从JSON读取时

时间:2016-07-02 04:27:17

标签: json swift null optional

我有一个程序,我收到一个带有电影列表的JSON,我尝试将标题放入一个数组中。代码的错误部分如下:

var movieArray: [JSON]!

override func viewDidLoad() {
    super.viewDidLoad()
    Alamofire.request(.GET, "https://api.themoviedb.org/3/discover/movie", parameters: ["sort_by" : "popularity", "api_key" : "secret"])

    .validate()
    .responseJSON { response in
        switch response.result {
            case .Success:
                let json = JSON(response.result.value!)
                //print(json)
                let arraySize: Int = json["results"].count
                for num in 0...arraySize {
                    let x = json["results"][num]["title"]
                    print(x)
                    self.movieArray[num] = (x)
                }
                print(self.movieArray[0])

            case .Failure(let error):
                print(error)
            }
    }

    self.tableView.registerClass(UITableViewCell.self, forCellReuseIdentifier: "cell")
}

当我运行它时,我收到此错误:

Puccini for Beginners 
fatal error: unexpectedly found nil while unwrapping an Optional value 
(lldb)  

有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

当您尝试解包nil的可选值时会发生此错误。在这种情况下,您的movieArray是一个可选值,这意味着它可能具有零值并且您保证在使用它之前您将拥有值,或者您将检查它是否有价值。

要解决此问题,您可以按 -

进行初始化
var movieArray = [JSON]()

或检查数组是否为

//---- Another way
guard movieArray != nil else {
    print("array is nil")
}

// Do stuff with movieAray

语句self.movieArray[num] = (x)使用的movieArray未初始化,因此根本没有任何元素可能是num值,因此赋值抛出错误。

BR