Запутался в сессионном менеджере
Используя 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
}
}
}
}
Что даст вам то, что вы ищете. Надеюсь, это поможет!