Alamofire忽略timeoutIntervalForRequest和timeoutIntervalForResource参数

时间:2016-07-05 14:33:34

标签: swift alamofire nsurlsessionconfiguration

我目前正在尝试为我的iOS应用中的每个Alamofire远程调用降低timeoutIntervalForRequesttimeoutIntervalForResource NSURLSessionConfiguration的默认值,因为我不希望它等待60秒分别为7天。

这是我的代码:

Alamofire.Manager.sharedInstance.session.configuration.timeoutIntervalForRequest = 30
Alamofire.Manager.sharedInstance.session.configuration.timeoutIntervalForResource = 30

let parameters = [
    "foo": [1,2,3],
    "bar": [
        "baz": "qux"
    ]
]

Alamofire.Manager.sharedInstance.request(.POST, "someURL", parameters: parameters, encoding: .JSON) {
    (response) in

    print(response.timeline)
}

这是我的日志:

Timeline: { "Latency": 60.977 secs, "Request Duration": 60.977 secs, "Serialization Duration": 0.000 secs, "Total Duration": 60.977 secs }

正如您所见,Request Duration值超过30秒。

这取决于我使用Alamofire.Manager.sharedInstance.request代替Alamofire.request吗?

2 个答案:

答案 0 :(得分:1)

我非常确定,因为您无法更改默认管理器的配置(或者至少我认为您可以,可能是一个错误)。< / p>

尝试实例化新的并添加自定义的NSURLSessionConfiguration。

例如:

var manager:Alamofire.Manager?

func initManager(timeoutInterval:Double) {
    let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()

    configuration.timeoutIntervalForRequest = timeoutInterval
    configuration.timeoutIntervalForResource = timeoutInterval

    manager = Alamofire.Manager(configuration: configuration)
}

// then use manager!.request to do your request

答案 1 :(得分:0)

我在官方Alamofire GitHub页面上打开issue,这是他们对此的看法:

  

更改已激活的会话中的配置值无效。根据Apple关于NSURLSession的文档:   Changing mutable values within the configuration object has no effect on the current session, but you can create a new session with the modified configuration object.

     

我建议您根据our documentation创建管理器实例并自定义其配置。