2016-11-24 94 views
2

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

成功:失敗

將不勝感激,如果有人可以幫助指向我在這裏正確的方向。

回答

9

通過打印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 
     } 
    } 
    } 

} 

哪個給你你要找的東西。希望有所幫助!

+1

非常有幫助,這絕對解決了我的問題。非常感謝您花時間回答這樣一個徹底的答案和例子! –