我遇到了应该超时的网络请求的问题,但是没有调用该方法。请求如下:
#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 :(得分: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的解决方案。