【问题标题】:Confused about Alamofire sessionmanager对 Alamofire sessionmanager 感到困惑
【发布时间】:2016-11-24 21:18:51
【问题描述】:

使用 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)")
}

成功:失败

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

【问题讨论】:

    标签: swift3 alamofire afhttpsessionmanager


    【解决方案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}
    

    这让我看到了这个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
          }
        }
      }
    
    }
    

    它会给你你正在寻找的东西。希望有帮助!

    【讨论】:

    • 非常非常有帮助,这绝对解决了我的问题。非常感谢您抽出宝贵时间回复如此详尽的答案和示例!
    猜你喜欢
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    • 2020-04-16
    • 2023-03-08
    • 2019-08-04
    • 2019-12-30
    • 2022-01-20
    相关资源
    最近更新 更多