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应用超时设置