首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速尝试/捕获NSJSONSerialization

快速尝试/捕获NSJSONSerialization
EN

Stack Overflow用户
提问于 2015-07-07 07:03:55
回答 2查看 5K关注 0票数 2

我正在使用try catches运行一个NSJSONSerialization命令,但当该命令返回nil时,它仍然失败。我的try catches有什么地方做得不对?

fatal error: unexpectedly found nil while unwrapping an Optional value发生在设置z的行上。为什么catch不能处理这个?

代码语言:javascript
复制
    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()
}
EN

回答 2

Stack Overflow用户

发布于 2015-07-08 01:21:21

do-try-catch进程捕获抛出的错误,但不是通用的异常处理进程。和以前一样,作为一名开发人员,您仍然有责任防止异常的发生(例如,强制展开可选的NSData)。

因此,在继续之前,请检查以确保data不是nil。同样,不要在转换中使用as!,除非您确信转换不会失败。更安全的做法是在datanil的情况下执行guard,并将JSON绑定到字典:

代码语言:javascript
复制
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()
票数 3
EN

Stack Overflow用户

发布于 2015-07-07 07:19:37

在尝试将errordata的值提供给NSJSONSerialization进行解析之前,您需要检查它们的值- data可能为空,这就是触发崩溃的原因。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31257164

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档