Запутался в сессионном менеджере

Используя Alamofire 4.0 и Swift 3.0 это работает:

Alamofire.request("http://content.uplynk.com/player/assetinfo/ab19f0dc98dc4b7dbfcf88fa223a6c3b.json", method: .get).responseJSON {
(response) -> Void in
print("Success: \(response.result)")
}

Успех: УСПЕХ

Однако, когда я пытаюсь использовать Sessionmanager, чтобы включить timeoutInterval, мои запросы всегда терпят неудачу

let configuration = URLSessionConfiguration.default
configuration.timeoutIntervalForRequest = 15
let alamofireManager = Alamofire.SessionManager(configuration: configuration)   
alamofireManager.request("http://content.uplynk.com/player/assetinfo/ab19f0dc98dc4b7dbfcf88fa223a6c3b.json").validate().responseJSON { 
    response in
    print("Success: \(response.result)")
    print("Response String: \(response.result.value)")
}

Успех: неудача

Был бы признателен, если бы кто-то мог помочь мне указать правильное направление здесь.

1 ответ

Печатью response.result.error Я получил:

Error Domain=NSURLErrorDomain Code=-999 "cancelled" UserInfo={NSErrorFailingURLKey=http://content.uplynk.com/player/assetinfo/ab19f0dc98dc4b7dbfcf88fa223a6c3b.json, NSLocalizedDescription=cancelled, NSErrorFailingURLStringKey=http://content.uplynk.com/player/assetinfo/ab19f0dc98dc4b7dbfcf88fa223a6c3b.json}

Что привело меня к этой ссылке:

Вы должны убедиться, что менеджер сохранен. Разница здесь в том, что инициализированный менеджер не принадлежит и освобождается вскоре после того, как он выходит из области видимости. В результате все незавершенные задачи отменяются.

Решение:

Один из способов решить эту проблему - объявить пользовательский менеджер сеансов вне объявления класса как глобальную переменную, например так...

let sessionManager: SessionManager = {
  let configuration = URLSessionConfiguration.default
  configuration.timeoutIntervalForRequest = 15

  return SessionManager(configuration: configuration)
}()

Теперь в вашем классе вы можете сделать запрос.

class ViewController: UIViewController {

  let url = "http://content.uplynk.com/player/assetinfo/ab19f0dc98dc4b7dbfcf88fa223a6c3b.json"

  override func viewDidLoad() {
    super.viewDidLoad()

    sessionManager.request(url).validate().responseJSON { response in
      switch response.result {
        case .success:
          print(response.result.value as! NSDictionary)
          break

        case .failure:
          print(response.result.error!)
          break
      }
    }
  }

}

Что даст вам то, что вы ищете. Надеюсь, это поможет!

Другие вопросы по тегам