首先,如果我使用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];
答案 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)
使用%f
,NSTimeInterval
是浮点数。
Refer Foundation data types ref:
NSTimeInterval
Used to specify a time interval, in seconds.
typedef double NSTimeInterval;
答案 3 :(得分:0)
它对我有用:
NSLog(@"request timeOutInterval:%@", requestURL.timeoutInterval);