Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift3 对Alamofire sessionmanager感到困惑_Swift3_Alamofire_Afhttpsessionmanager - Fatal编程技术网

Swift3 对Alamofire sessionmanager感到困惑

Swift3 对Alamofire sessionmanager感到困惑,swift3,alamofire,afhttpsessionmanager,Swift3,Alamofire,Afhttpsessionmanager,使用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)") } 成功:成功 但是,当我尝试使用Session

使用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)")
}
成功:失败


如果有人能帮我指出正确的方向,我将不胜感激。

通过打印
响应。结果。错误
我得到:

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

}

这会给你你想要的。希望有帮助

非常非常有用,这绝对解决了我的问题。非常感谢您花时间给出如此详尽的回答和示例!