致命错误:在展开可选值json时意外发现nil

时间:2016-11-28 04:42:14

标签: ios swift3 urlsession

当我从服务器获取数据时,它将显示致命错误 在我的代码下面

URLSession.shared.dataTask(with: myRequest, completionHandler: { (data:Data?, response:URLResponse?, error:Error?) -> Void in
        DispatchQueue.main.async {
            if error != nil {
            }
            do {
                if let json = try JSONSerialization.jsonObject(with: (data)!, options: .mutableContainers) as? NSMutableDictionary {
            }
       }
}

2 个答案:

答案 0 :(得分:1)

let task = URLSession.shared.dataTask(with: request) { (data, response, error) in
 do
  {
  let dict  =  try JSONSerialization.jsonObject(with: data!, options: .mutableContainers)

    Dispatch.main.async {
       // refresh ui like tableview[tableView.roloadData()] or collectionview
    }

  }catch{

   }
}
task.resume()

答案 1 :(得分:0)

您的代码中的错误很少。

  1. 您正在检查nil的错误并在此检查之外反序列化json。

  2. 你是强行展开(!)数据而不检查是否为零。

  3. 你使用do,但我看不到捕获。除非你确实需要,否则请不要使用do / catch。

  4. 另外,我建议您在已经反序列化对象时使用mainThread。

    URLSession.shared.dataTask(with: myRequest) { (data, _, error) -> Void in
      guard let data = data else { return }
      let dict  =  try? JSONSerialization.jsonObject(with: data, options: .mutableContainers) {
        ...
        Dispatch.main.async {
          // refresh ui
        }
      }
    
    }