exc_bad_instruction on NSJSONSerialization



我试图从我的数据库中获取数据,但我有一个exc_bad_instruction在我的NSJSONSerialization。

func request(url:String, callback:(NSDictionary) -> ()){
        let nsURL = NSURL(string: url)
        let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
            (data, response, error) in
            //var error:NSError?
            var response:NSDictionary
            do{
                response = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary
                callback(response)
            }catch{
                print("Something went wrong!")
            }

        }
        task.resume()
    }

你知道为什么它不工作吗?为了让你知道一些事情,我不得不从Swift 2开始使用do, try, catch,因为它之前工作得很好!

没有完整的错误消息,我们猜测关于确切的问题,但您应该针对错误的输入数据进行guard:

func request(url:String, callback:(NSDictionary) -> ()){
    let nsURL = NSURL(string: url)
    guard nsURL != nil else {
        print("URL not valid: (url)")
        return
    }
    let task = NSURLSession.sharedSession().dataTaskWithURL(nsURL!){
        (data, response, error) in
        guard data != nil else {
            print("dataTaskWithURL failed: (error)")
            return
        }
        do {
            if let response = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? NSDictionary {
                callback(response)
            } else {
                print("JSON parsing succeeded, but cast to dictionary failed")
            }
        } catch let parseError {
            print("Something went wrong: (parseError)")
        }
    }
    task.resume()
}

do - try - catch捕获错误,而不是异常,因此您必须自己测试有效URL和有效NSData。此外,避免强制展开可选(例如!),特别是当它是一个合理的运行时错误(例如没有网络)时。请使用可选绑定。

相关内容

  • 没有找到相关文章

最新更新