iPhone SDK:URL请求没有超时

时间:2010-03-18 16:17:27

标签: iphone timeout nsurlconnection

我遇到了应该超时的网络请求的问题,但是没有调用该方法。请求如下:

#define kCONNECT_TIMEOUT 20.0

request = [NSMutableURLRequest requestWithURL: aUrl];
[request setHTTPMethod: @"POST"];
postData = [jsonData dataUsingEncoding:NSASCIIStringEncoding];
[request setHTTPBody:postData];
[request setValue:@"text/xml" forHTTPHeaderField:@"Accept"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request setCachePolicy:NSURLCacheStorageAllowed];
[request setTimeoutInterval:kCONNECT_TIMEOUT];
self.connection = [NSURLConnection connectionWithRequest:request delegate:self];
assert(self.connection != nil);

这应该回调

- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)_error 

但是4分钟后没有显示错误信息。任何人都知道为什么会这样吗?

2 个答案:

答案 0 :(得分:3)

如果您希望使用NSURLConnection对http请求进行更好的超时管理,那么将{em>异步与NSTimer一起运行可以取消{{1}更好当它因为超时期限到期而触发时。

这也意味着您不必处理线程,这通常是一个好主意。基于异步事件(runloop)的操作是iPhone上99.9%的案例。

答案 1 :(得分:2)

Apple的一位代表已经透露SDK 3.0及其后的执行时间最短超时(你猜对了)四分钟:

https://devforums.apple.com/thread/25282

如果您尝试将超时值设置为小于240秒,则会将其限制为240.如果您需要更短的超时时间,我会投票支持St3fan的解决方案。