NSURLRequest 超时 IOS

Posted

技术标签:

【中文标题】NSURLRequest 超时 IOS【英文标题】:NSURLRequest Timeout IOS 【发布时间】:2012-07-30 09:00:34 【问题描述】:

我需要使用 UIRequest 设置超时 15 秒或 30 秒,但它总是采用默认值。有什么方法可以设置连接的最小超时时间。

【问题讨论】:

请发布您正在使用的代码。 我在这个链接中找到了答案,因为我遇到了同样的问题,它对我有用。 kelp.phate.org/2012/07/set-timeout-nsurlrequest.html 【参考方案1】:

This answer 解释了NSURLRequest 对象的timeoutInterval 的最小值。如果您需要一个较小的值,那么您可以使用所需的时间启动一个 NSTimer,并在计时器的触发方法中取消您的 NSURLConnection 对象的连接。如:

//....
connection = [[NSURLConnection connectionWithRequest:request delegate:self] retain];
[request release];

[connection start];

if (timer == NULL) 

    timer = [NSTimer scheduledTimerWithTimeInterval: TimeOutSecond
                                             target: self
                                           selector: @selector(cancelURLConnection:)
                                           userInfo: nil 
                                            repeats: NO];
    [timer retain];



- (void)cancelURLConnection:(NSTimer *)timerP 
    [connection cancel]; //NSURLConnection object
    NSLog(@"Connection timeout.");
    [timer invalidate];

【讨论】:

【参考方案2】:

在构建时设置超时间隔属性似乎有问题:

NSMutableURLRequest* request = [[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:240.0];

而是在构造之后设置它:

request.timeoutInterval = 70;

另请注意,您可以设置多低的间隔似乎有一些限制。阅读这篇文章了解更多信息: https://devforums.apple.com/message/108087#108087

【讨论】:

如果我将超时设置为超过 240,它工作正常。我需要不到 240 秒。 240 似乎是接受的最低值(请参阅上面答案中的链接)。但是,有些人通过在构建后设置超时间隔来报告成功(也许在这种情况下规则不是强制的)。但这在未来可能会改变。也许你应该考虑另一种方法。在慢速蜂窝网络上 15 秒可能会有问题... ios7 和 iOS8 中你可以设置任何你想要的值。默认为 60 秒 @AndrewBennett:我可以在 ios 7 和 8 中设置任何范围的超时值,但不坚持指定的值。假设我设置了 180 秒的超时间隔,didFailWithError: 会在 75 到 220 秒的范围内被触发,并且比这更大一些,但不是在 180 秒的间隔内。我正在使用 POST 方法进行异步 Web 服务调用。对此有什么想法吗?【参考方案3】:

我相信 POST 请求的超时最小值为 4 分钟。最安全的方法是启动NSTimer 并在超时触发时取消请求。

【讨论】:

以上是关于NSURLRequest 超时 IOS的主要内容,如果未能解决你的问题,请参考以下文章

IOS NSURLRequest下Webview Ajax应用超时设置

NSURLRequest setTimeoutInterval 没有按预期工作

网络请求之GETPOST请求

在同步调用上强制 NSUrlConnection 超时

restkit 0.20.0 中的请求超时

ios facebook sdk 请求的超时值