swift 2.1 alamofire timeout方法

我有问题关于alamofire超时的方法,首先,我的英语可能不够好,让你们明白我说什么…但我会厌倦解释我的问题

在我的项目中,我使用alamofire,出于某种原因,我需要确保我的应用程序工作的连接区域不佳。 所以我想使用超时的方法。

我看到有一些人说,使用解决scheme1:

let configuration = NSURLSessionConfiguration.defaultSessionConfiguration() configuration.timeoutIntervalForRequest = 2 // seconds self.alamofireManager = Alamofire.Manager(configuration: configuration) self.alamofireManager!.request(.GET, "http://example.com/") .response { (request, response, data, error) in 

将解决这个问题,但在我的情况下,我看到debugging区域说我的要求是“取消”

所以我尝试了另一个我在这里看到的解决scheme(stackoverflow)解决scheme2:

 let manager = Alamofire.Manager.sharedInstance manager.session.configuration.timeoutIntervalForRequest = 5 manager.request(.POST, url, parameters: params, encoding: .JSON, headers: nil).response(queue: dispatch_get_main_queue()) { (Request, res, data, error) -> Void in{} 

这种方法似乎应该工作,但只有当我让我的应用程序去背景和反应我的应用程序,debugging区域显示请求“超时”,否则debugging区域没有显示任何东西,除非我切换到背景和反应的应用程序。

我使用Xcode 7.1和ios 9.0

更新:如果我使用解决scheme2,如果我让requesttimeout = 5,debugging区域将显示“超时错误”,但它需要超过5秒…有时它会显示大约30秒,但有时超过1分钟….

UPDATE2:我发现问题是什么。 问题是如果你正在使用reachabilty框架来检测连接状态,那么系统可能会检测到连接是否打开,然后会显示请求超时后isReachable(可能需要1分钟)。

基于NSURLSessionConfiguration类参考

此属性根据此configuration确定会话内所有任务的请求超时间隔。 请求超时间隔控制任务在放弃之前应等待额外数据到达的时间(以秒为单位)。 每当新数据到达时,与该值关联的计时器就会重置。 当请求定时器达到指定的时间间隔而没有收到任何新的数据时,会触发超时。

每当新数据到达时,计时器都会重置,这就是为什么您有不同的错误时间。

你也可以为请求设置一个参数:

 manager.session.configuration.timeoutIntervalForResource = 5