2010-03-18 62 views
3

我遇到网络请求应该超时的问题,但该方法未被调用。请求如下:iPhone SDK:URL请求不会超时

#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分钟后。任何人都知道这可能是为什么?

+0

重复http://stackoverflow.com/questions/1466389/nsmutableurlrequest-timeout-interval-not-taken-into-consideration-for-post-reques – KevinDTimm 2010-03-18 16:28:22

+0

这个问题已在iOS 4的起 – Abhi 2012-02-16 13:48:53

回答

2

苹果一名代表透露说,SDK 3.0和更高版本强制执行(你猜对了)4分钟最小超时:

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

如果你尝试设置的低于240秒的超时值,它会被限制为240.如果您需要更短的超时时间,我会为St3fan的解决方案投下我的票。

+0

没有sh * t Sherlock!你是对的。这是一个计时器。 – user279778 2010-03-18 23:53:58

+0

现在完成所有工作。感谢您的评论。 – user279778 2010-03-19 15:25:03

3

如果你想使用NSURLConnection http请求超时更好管理则是更好的运行要求异步连同NSTimer,可以取消NSURLConnection火灾时,因为超时时间已过。

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

+0

我想上面的代码是异步的,不是吗?所以你说的是请求setTimeoutInterval被破坏,而且更好地显式定义一个单独的计时器呢? – user279778 2010-03-18 17:17:18

+0

对不起,你是对的。你的代码是异步的。但是,是的,同样适用。如果您希望更好地控制超时,那么只需在请求旁边运行一个计时器即可。 – 2010-03-18 18:15:24

+0

我最近做了一个演示应用程序,并没有互联网连接,我注意到,是的,它确实超时了,因为它应该。这是使用iOS 4,所以现在可能这个问题已经修复。 – user279778 2010-08-23 12:41:44