在同步调用上强制NSUrlConnection超时

时间:2011-03-01 23:12:48

标签: ios nsurlconnection nsurlrequest

我知道有关ios上的nsurlconnection的讨论,并且超时至少有240秒。我的问题是,如果我通过NSURLConnection发送同步调用+(NSData *)sendSynchronousRequest:(NSURLRequest )请求returnsResponse:(NSURLResponse * )响应错误:(NSError **)错误,有没有我可以在240秒之前取消这个机会吗?我想也许设置一个计时器来取消这个同步请求,但我甚至不确定它是否可能?我在想:

[self performSelector:@selector(cancelRequest:) withObject:myRequest afterDelay:myTimeOut];

我有一种感觉,如果请求已经发布,这将导致灾难,我无法确定。思考?有没有人试过这样做?这是同步调用。

3 个答案:

答案 0 :(得分:6)

你不能取消它。只是不要使用它而是使用异步调用。那些你可以轻松取消的。

答案 1 :(得分:6)

这似乎对我有用:

NSURL *url = [NSURL URLWithString:@"http://someurl.com"];
NSURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:5];
NSHTTPURLResponse *response = nil;
[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:NULL];
if (response == nil) {
    // timed out or failed
} else {
    // all good
}

当然将超时间隔设置为您希望它在超时之前阻止主线程的时间 - 上述代码在5秒后成功超时

在iOS6&amp ;;中测试iOS5.1

答案 2 :(得分:1)

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url    cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10.0];

webData = (NSMutableData *)[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];

if (webData==nil) {
        [self displayAlert:@"Time Out" message:@"Request Timed Out"];
    }

超过10秒钟。