NSMutableURLRequest setTimeoutInterval问题

时间:2011-09-15 10:47:19

标签: iphone nsmutableurlrequest

首先,如果我使用NSURLReuqest(非可变)如下,则连接会根据设置进行超时。 奇怪的是为什么NSLog总是读0?

self.requestURL = [NSURLRequest requestWithURL:[NSURL URLWithString:requestString]cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0];
NSLog(@"request timeOutInterval:%d", self.requestURL.timeoutInterval); // always 0

接下来,我做了类似的事情,并且没有设置timeoutInterval。

self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString]] autorelease];
[self.requestURL setTimeoutInterval:20];
NSLog(@"request timeOutInterval:%i", self.requestURL.timeoutInterval); // same thing always 0 here.

EDIT。我现在使用%f来记录timeoutInterval属性,并且都读取20.000。但真正的问题是为什么我的NSMutableURLRequest在到达timeoutInterval(20s)时没有触发- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error委托回调方法。相反,它只是在75s左右计时。甚至超过60秒的默认值......

即使我删除了[self.requestURL setTimeoutInterval:20];行,连接仍然会在75秒超时。

我试过了

self.requestURL = [[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:requestString] cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:20.0] autorelease];

4 个答案:

答案 0 :(得分:3)

试试这个

NSLog(@"request timeOutInterval:%f", self.requestURL.timeoutInterval);它对我有用。

<强>更新

在之前的SO question

中查看@Francois的回答
  

Apple开发论坛上有一个讨论此问题的帖子。显然地   在iPhone OS上,setter要求timeoutInterval至少为240   秒(4分钟)。仅当postBody不为空时才会发生这种情况   (通常在使用POST请求时)。这看起来很疯狂,但是   显然,它确保请求离开系统   虽然唤醒WWAN(3G)接口可能需要几秒钟   起来。 240秒看起来相当陡峭,所以他们建议设置一个计时器   计时器触发时取消异步连接。我知道这个   看起来很愚蠢,但这是我唯一设法让POST超时   请求...

答案 1 :(得分:0)

您的NSLog语句使用%d格式说明符,表示整数,但timeoutInterval属性为双精度。

请尝试使用%f,这表示您要记录双倍值。

答案 2 :(得分:0)

使用%fNSTimeInterval是浮点数。

Refer Foundation data types ref:
NSTimeInterval
Used to specify a time interval, in seconds.
typedef double NSTimeInterval;

答案 3 :(得分:0)

它对我有用:

NSLog(@"request timeOutInterval:%@", requestURL.timeoutInterval);