NSURLSession:在解包Optional值时意外发现nil

时间:2015-12-14 14:30:02

标签: swift nsurlsession

我试图从我自己的API中获取数据。我可以看到我的控制台日志中的数据,但它一直给我发现nil错误。

继承我的代码:

let request = NSMutableURLRequest(URL: NSURL(string: "linkHere")!)
    request.HTTPMethod = "POST"
    let postString = "sol=\(name)&sector=\(sector)"
    request.HTTPBody = postString.dataUsingEncoding(NSUTF8StringEncoding)
    let task = NSURLSession.sharedSession().dataTaskWithRequest(request) {
        data, response, error in

        if error != nil {
            print("error=\(error)")
            return
        }

        print("response = \(response)")

        let responseString = NSString(data: data!, encoding: NSUTF8StringEncoding)
        print("responseString = \(responseString)")
        do {
            self.json = try NSJSONSerialization.JSONObjectWithData(data!, options: .MutableLeaves) as? NSDictionary
        } catch let error as NSError{
         print("TEST Error \(error)")
        }

           if let parseJSON = self.json {


            dispatch_async(dispatch_get_main_queue())
                {

                    let storyboard = UIStoryboard(name: "Main", bundle: nil)

                    let vc = storyboard.instantiateViewControllerWithIdentifier("detailView") as! detailViewController
                     let x = parseJSON["sector"] as! String
                    vc.secLab = x
                    self.presentViewController(vc, animated: true, completion: nil)

            }
         }

    }
    task.resume()

在我的控制台日志中,我可以看到数据见下图:

enter image description here

我做错了什么?

2 个答案:

答案 0 :(得分:4)

基本上,在捕获错误并仅打印它之后继续执行“好”代码是一个坏主意。

如果您打开joins分支中的转换类型,它会在成功时变为非可选类型,否则会捕获相应的错误。

语法应该看起来像

INNER JOIN

答案 1 :(得分:3)

您已将json转换为可选的NSDictionary,但您的json响应是您附加的屏幕截图中的数组外观方括号。