-1

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

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 {
            }
       }
}
4

2 回答 2

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()
于 2016-11-28T05:47:42.727 回答
0

您的代码中有一些错误。

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

  2. 您正在强制展开(!)数据而不检查它是否为零。

  3. 你使用do,但我看不到catch。请不要使用 do/catch 除非你真的需要它。

另外,我建议您在已经反序列化对象时使用 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
    }
  }

}
于 2016-11-28T06:00:53.543 回答