我正在运行带有try catch的NSJSONSerialization命令,但是当命令返回nil时它仍然失败。我尝试捕获的错误是什么?
fatal error: unexpectedly found nil while unwrapping an Optional value
发生在设置z的行。捕捉为什么不处理这个?
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()
}
答案 0 :(得分:3)
do
- try
- catch
进程会捕获引发的错误,但不是一般化的异常处理过程。和以前一样,作为开发人员,您仍然有责任防止出现异常(例如强制解包可选的NSData
)。
因此,在继续操作之前,请检查以确保data
不是nil
。同样,除非你确信演员阵容不会失败,否则不要在演员阵容中使用as!
。 guard
对data
为nil
更安全,并执行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()
答案 1 :(得分:2)
您需要检查error
和data
的值,然后再尝试将它们NSJSONSerialization
解析 - data
可能为零,这就是触发崩溃的原因