Загрузка JSON с NSURLSession не возвращает никаких данных

В настоящее время я пытаюсь загрузить, разобрать и распечатать JSON с URL-адреса. До сих пор я дошел до этого:

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); } 

остается пустым. Когда я отлаживаю, соединение начинается успешно, с заданным URL-адресом в качестве параметра. Но моя переменная jsonData не печатается. Вместо этого блок catch выдает ошибку, заявляя, что в моей переменной нет данных:

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

Может кто-нибудь, пожалуйста, помогите мне с этим? Что мне не хватает?

Спасибо вам всем заблаговременно!

[Отредактировано после переключения из NSURL Connection в NSURLSession]

One Solution collect form web for “Загрузка JSON с NSURLSession не возвращает никаких данных”

Вот пример того, как использовать NSURLSession с очень удобным «обработчиком завершения».

Эта функция содержит сетевой вызов и имеет «обработчик завершения» (обратный вызов, когда данные будут доступны):

 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)") } } } 
  • Соединение RMI отказалось на localhost
  • В чем разница между соединением и таймаутом чтения для сокетов?
  • Запустить командный файл с командой psql без пароля
  • проверить подключение к Интернету в cocoa-приложении
  • Как немедленно закрыть сервер HTTP (Node.js)?
  • HttpClient 4.0.1 - как освободить соединение?
  • mySQL - создание новой таблицы с использованием данных и столбцов из трех таблиц
  • Java обнаруживает потерянное соединение
  • Что именно влияет на URLConnection.setDoOutput ()?
  • Давайте будем гением компьютера.