当我尝试连接Web服务时,我需要在应用程序中设置30秒的时间。我尝试过cachePolicy:timeoutInterval,但这没有任何效果。我的代码如下:
NSURL *url = [NSURL URLWithString:@"http://myservice.asmx"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
NSString *msgLength = [NSString stringWithFormat:@"%d", [soapMessage length]];
[request addValue:@"text/xml; charset=utf-8" forHTTPHeaderField:@"Content-Type"];
[request addValue:@"http://tempuri.org/GetVehiclesByPhone_ServiceCall_Proc" forHTTPHeaderField:@"SOAPAction"];
[request addValue:msgLength forHTTPHeaderField:@"Content-Length"];
[request setHTTPMethod:@"POST"];
[request setHTTPBody:[soapMessage dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]];
NSError *error;
NSURLResponse *response;
webData =[[NSMutableData alloc] init];
webData = (NSMutableData *) [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
答案 0 :(得分:0)
使用+[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]
。
基本上,+[NSURLConnection sendSynchronousRequest:returningResponse:error:]
不遵守小间隔传入的timeoutInterval
,而异步请求则不符合。{/ p>
如果你考虑事情是如何工作的,那就显而易见了:同步请求是阻塞的,并且监视器没有简单的方法来检查超时 - 线程被阻止了!异步请求不会阻塞线程,因此,它可以检查每个runloop运行的超时时间。