在同步调用上强制NSUrlConnection超时

Yin*_*ing 1 nsurlconnection nsurlrequest ios

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

[self performSelector:@selector(cancelRequest:) withObject:myRequest afterDelay:myTimeOut];
Run Code Online (Sandbox Code Playgroud)

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

Jas*_*oco 6

你无法取消它.只是不要使用它而是使用异步调用.那些你可以轻松取消.

  • @Ying:你的问题*没有得到答案.你根本就不喜欢这个答案.你*不能*取消同步请求.如果您希望NSURLConnection可以中断,那么您必须**使其成为异步请求.然后,您可以随时取消它.你上面的建议会失败. (9认同)

sla*_*zar 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
}
Run Code Online (Sandbox Code Playgroud)

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

在iOS6和iOS5.1中测试过