Jac*_*k W 6 timeout ios swift alamofire
我对alamofire超时方法有疑问,首先,我的英语可能不够好让你们明白我说的话......但我会厌倦解释我的问题
在我的项目中,我使用了alamofire,出于某种原因,我需要确保我的应用程序工作连接区域较差.所以我在想使用超时方法.
我看到有人说,使用解决方案1:
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
Run Code Online (Sandbox Code Playgroud)
将解决问题,但在我的情况下,我看到调试区域说我的请求是"取消"
所以我尝试了另一种解决方案,我在这里看到(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{}
Run Code Online (Sandbox Code Playgroud)
这个方法似乎应该工作,但只有当我让我的应用程序转到后台并反应我的应用程序时,调试区域显示请求"超时",否则调试区域没有显示任何内容,除非我将其切换到后台并响应应用程序.
我正在使用Xcode 7.1和ios 9.0
更新:如果我使用解决方案2,如果我让requesttimeout = 5,调试区域将显示"超时错误",但它需要超过5秒...有时它将显示大约30秒,但有时超过1分钟....
更新2:我发现了问题所在.问题是如果你使用remhabilty框架来检测连接状态,那么系统可能首先检测到连接是否打开,然后它会在isReachable之后显示请求超时(可能需要1分钟).
基于NSURLSessionConfiguration 类参考
此属性根据此配置确定会话内所有任务的请求超时间隔。请求超时间隔控制任务在放弃之前应等待其他数据到达的时间(以秒为单位)。每当新数据到达时,与该值关联的计时器就会重置。当请求定时器达到指定的时间间隔而没有收到任何新数据时,就会触发超时。
每当新数据到达时计时器就会重置,这就是为什么你有不同的错误时间。
您还可以为请求再设置一个参数:
manager.session.configuration.timeoutIntervalForResource = 5
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5014 次 |
| 最近记录: |