困惑Alamofire sessionmanager
问题描述:
使用Alamofire 4.0和雨燕3.0这个作品:困惑Alamofire sessionmanager
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)")
}
成功:失败
将不胜感激,如果有人可以帮助指向我在这里正确的方向。
答
通过打印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}
导致我这个reference:
您需要确保该经理被保留。这里的差异 是初始化的管理者不是拥有的,并且在其超出范围之后不久被解除分配 。因此,任何未完成的任务都将取消 。
解决方案:为您解决其是通过宣布自定义会话管理器类声明像这样一个全局变量之外的问题
的一种方式......
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
}
}
}
}
哪个给你你要找的东西。希望有所帮助!
非常有帮助,这绝对解决了我的问题。非常感谢您花时间回答这样一个彻底的答案和例子! –