我正在使用try catches运行一个NSJSONSerialization命令,但当该命令返回nil时,它仍然失败。我的try catches有什么地方做得不对?
fatal error: unexpectedly found nil while unwrapping an Optional value发生在设置z的行上。为什么catch不能处理这个?
func reachForWebsite(){
let url = NSURL(string: "https://myURL")
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) {(data, response, error) in
do {
let z = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as! [NSObject: AnyObject]
} catch let myJSONError {
print(myJSONError)
}
}
task!.resume()
}发布于 2015-07-08 01:21:21
do-try-catch进程捕获抛出的错误,但不是通用的异常处理进程。和以前一样,作为一名开发人员,您仍然有责任防止异常的发生(例如,强制展开可选的NSData)。
因此,在继续之前,请检查以确保data不是nil。同样,不要在转换中使用as!,除非您确信转换不会失败。更安全的做法是在data为nil的情况下执行guard,并将JSON绑定到字典:
let task = NSURLSession.sharedSession().dataTaskWithURL(url!) { data, response, error in
guard data != nil else {
print(error)
return
}
do {
if let z = try NSJSONSerialization.JSONObjectWithData(data!, options:[]) as? [String: AnyObject] {
// do something with z
}
} catch let parseError {
print(parseError)
}
}
task.resume()发布于 2015-07-07 07:19:37
在尝试将error和data的值提供给NSJSONSerialization进行解析之前,您需要检查它们的值- data可能为空,这就是触发崩溃的原因。
https://stackoverflow.com/questions/31257164
复制相似问题