ios - AlamoFire 不遵守超时间隔

标签 ios swift alamofire

class APIClient {
    var user = User()
    let alamoFireManager : Alamofire.Manager?
    let center = NSNotificationCenter.defaultCenter()


    init(){
        let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        configuration.timeoutIntervalForRequest = 4 // seconds
        configuration.timeoutIntervalForResource = 4
        self.alamoFireManager = Alamofire.Manager(configuration: configuration)
    }

    func test(){
        //This does not respect the 4 second time out. Why?
        self.alamoFireManager!.request(.POST, CONSTANTS.APIEndpoint+"/test", parameters: parameters).responseJSON {
                        (req, res, json, error)  in
                        if let json = self.handleAPIResponse(req, res: res, json_data: json, error: error){
                        }
                    }
    }

最佳答案

您确定没有强制执行 4 秒超时吗?我创建了一个实验:

    let center = NSNotificationCenter.defaultCenter()
    var alamoFireManager : Alamofire.Manager?

    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
    configuration.timeoutIntervalForRequest = 4 // seconds
    configuration.timeoutIntervalForResource = 4
    self.alamoFireManager = Alamofire.Manager(configuration: configuration)

    self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/2", parameters: nil).responseJSON {
        (req, res, json, error)  in
        println("First json \(json)")
        println("First error \(error)")
    }

    self.alamoFireManager!.request(.POST, "http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6", parameters: nil).responseJSON {
        (req, res, json, error)  in
        println("Second \(json)")
        println("Second \(error)")
    }

我得到的控制台输出:

First json Optional({
    name = timeoutTest;
    value = 2;
})
First error nil
Second nil
Second Optional(Error Domain=NSURLErrorDomain Code=-1001 "The request timed out." UserInfo=0x7f91dc8223e0 {NSErrorFailingURLKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6, NSLocalizedDescription=The request timed out., NSErrorFailingURLStringKey=http://oznet.go.ro/iDorMobile/ConfigServer/api.php/timeout/6})

我示例中的 URL 目前已关闭,我会尝试将它们重新联机。 您可以使用示例中的 url 进行测试。通过在末尾设置不同的数字,您可以修改超时(以秒为单位)。

我用过 cocoapods 的最后一个版本的 Alamofire。

关于ios - AlamoFire 不遵守超时间隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31095070/

相关文章:

ios - Swift 4 - 测验应用程序随机问题

swift - 我怎样才能在选择器中快速到达所选项目的标题和项目的值(value)?

ios - 更改 Alamofire.SessionManager 的 serverTrustPolicy 以仍然使用像 Alamofire.request 这样的顶级便捷方法

ios - 如何将自定义 View 添加到 JSQMessagesViewController 单元格,以便它包含一个带有一些按钮和 TextView 的 View ?

ios - Swift - 查看层次结构

ios - 来电时暂停 iOS 音频流的最佳方法

swift - 由于 'internal' 保护级别,“值”无法访问

swift - AlamoFire GET api 请求未按预期工作

ios - 向可滚动的 UITextView 添加渐变背景

objective-c - 在 iPad 应用程序中心显示操作表