我对 alamofire 超时方法有疑问,
首先,我的英语可能不够好,无法让你们理解我所说的...但我会厌倦解释我的问题
在我的项目中,我使用了 alamofire ,出于某种原因,我需要确保我的应用程序在连接不良的区域工作。所以我正在考虑使用超时方法。
我看到有人说,用
解决方案一:
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
将解决问题,但就我而言,我看到调试区域说我的请求是“取消”
所以我尝试了我在这里看到的另一个解决方案(stackoverflow)
解决方案2:
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{}
这种方法似乎应该有效,但只有当我让我的应用程序进入后台并反应我的应用程序时,调试区域才会显示请求“超时”,否则调试区域不会显示任何内容,除非我将其切换到后台并反应应用程序。
我正在使用 Xcode 7.1 和 ios 9.0
更新:
如果我使用解决方案2,如果我让requesttimeout = 5,调试区域将显示“超时错误”,但需要超过5秒...有时会显示30秒左右,但有时会超过1分钟.. ..
更新2:
我发现问题是什么了。问题是,如果您使用reachabilty框架来检测连接状态,那么系统可能会先检测连接是否打开,然后在isReachable之后显示请求超时(可能需要长达1分钟)。