使用NSURLSession下载JSON不会返回任何数据

我目前正在尝试从URL下载,parsing和打印JSON。 到目前为止,我已经到了这个地步:

1)处理我的导入的类(JSONImport.swift):

var data = NSMutableData(); let url = NSURL(string:"http://headers.jsontest.com"); var session = NSURLSession.sharedSession(); var jsonError:NSError?; var response : NSURLResponse?; func startConnection(){ let task:NSURLSessionDataTask = session.dataTaskWithURL(url!, completionHandler:apiHandler) task.resume(); self.apiHandler(data,response: response,error: jsonError); } func apiHandler(data:NSData?, response:NSURLResponse?, error:NSError?) { do{ let jsonData : NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary; print(jsonData); } catch{ print("API error: \(error)"); } } 

我的问题是,数据在

 do{ let jsonData : NSDictionary = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers) as! NSDictionary; print(jsonData); } 

仍然是空的。 当我debugging时,连接启动成功,给定的url作为参数。 但我的jsonDatavariables不会被打印。 相反,catch块会抛出错误,指出我的variables中没有数据:

 API error: Error Domain=NSCocoaErrorDomain Code=3840 "No value." 

有人可以帮我这个吗? 我错过了什么?

非常感谢您提前!

[从NSURL连接切换到NSURLSession之后编辑]

下面是一个关于如何使用非常方便的“完成处理程序”使用NSURLSession的例子。

该函数包含networking调用,并具有“完成处理程序”(数据可用时的callback):

 func getDataFrom(urlString: String, completion: (data: NSData)->()) { if let url = NSURL(string: urlString) { let session = NSURLSession.sharedSession() let task = session.dataTaskWithURL(url) { (data, response, error) in // print(response) if let data = data { completion(data: data) } else { print(error?.localizedDescription) } } task.resume() } else { // URL is invalid } } 

你可以这样使用它,在一个新的函数中,用“尾部闭包”:

 func apiManager() { getDataFrom("http://headers.jsontest.com") { (data) in do { let json = try NSJSONSerialization.JSONObjectWithData(data, options: []) if let jsonDict = json as? NSDictionary { print(jsonDict) } else { // JSON data wasn't a dictionary } } catch let error as NSError { print("API error: \(error.debugDescription)") } } }