NSURLSession:如何增加URL请求的超时?

时间:2014-05-02 12:59:26

标签: ios objective-c swift http nsurlconnection

我正在使用iOS 7的新NSURLSessionDataTask来检索数据,如下所示:

NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:
request completionHandler:
^(NSData *data, NSURLResponse *response, NSError *error) {
//
}];

如何增加超时值以避免错误"The request timed out"(在NSURLErrorDomain代码= -1001中)?

我已查看NSURLSessionConfiguration的文档,但未找到设置超时值的方法。

感谢您的帮助!

7 个答案:

答案 0 :(得分:94)

ObjC

NSURLSessionConfiguration *sessionConfig = [NSURLSessionConfiguration defaultSessionConfiguration];
sessionConfig.timeoutIntervalForRequest = 30.0;
sessionConfig.timeoutIntervalForResource = 60.0;

夫特

let sessionConfig = URLSessionConfiguration.default
sessionConfig.timeoutIntervalForRequest = 30.0
sessionConfig.timeoutIntervalForResource = 60.0
let session = URLSession(configuration: sessionConfig)

文档说什么

timeoutIntervalForRequesttimeoutIntervalForResource指定请求的超时间隔以及资源。

  

timeoutIntervalForRequest - 等待时使用的超时间隔   用于其他数据。与此值关联的计时器将重置   每当新数据到达时。当请求计时器到达时   指定的间隔没有接收任何新数据,它触发一个   超时。

     

timeoutIntervalForResource - a的最长时间   应该允许资源请求。该值控制如何   在放弃之前等待整个资源的转移。该   资源计时器在启动请求时启动并计数直到   请求完成或达到此超时间隔,   以先到者为准。

基于NSURLSessionConfiguration Class Reference

答案 1 :(得分:16)

如果Swift开发者来到这里

要执行此操作,您需要使用

    let urlconfig = NSURLSessionConfiguration.defaultSessionConfiguration()
    urlconfig.timeoutIntervalForRequest = 12
    urlconfig.timeoutIntervalForResource = 12
    self.session = NSURLSession(configuration: urlconfig, delegate: self.delegates, delegateQueue: nil)

答案 2 :(得分:8)

在swift 3.超时15秒。

    let configuration = URLSessionConfiguration.default
    configuration.timeoutIntervalForRequest = TimeInterval(15)
    configuration.timeoutIntervalForResource = TimeInterval(15)
    let session = URLSession(configuration: configuration)

答案 3 :(得分:4)

NSURLSessionConfiguration包含属性timeoutIntervalForRequest:

@property NSTimeInterval timeoutIntervalForRequest

控制超时间隔。启动请求后,还有超时的timeoutIntervalForResource。

答案 4 :(得分:2)

在SWIFT 3.0中,您需要使用

java -Dpackage="myPackage" -jar ....

答案 5 :(得分:1)

对于Swift 4:

let config = URLSessionConfiguration.default
config.timeoutIntervalForRequest = TimeInterval(15)
config.timeoutIntervalForResource = TimeInterval(15)
let urlSession = URLSession(configuration: config)

timeoutIntervalForRequest适用于基于此配置的会话中的所有任务。 timeoutIntervalForResource适用于基于此配置的会话中的所有任务。

答案 6 :(得分:0)

就我而言,我正在增加错误的课程的超时时间。我的超时错误是通过增加 URLRequest 而不是 URLSession

的超时解决的
var request = URLRequest(url: url)
request.timeoutInterval = 30