2012-11-02 59 views
0

我有5个HTML请求从Web服务获取数据。我正在请求for循环。如何等待xml解析的多个请求的响应?

-(void)loadPreviewsData 
{ 
    NSMutableURLRequest *request; 
    for (int i=1; i<=5; i++) 
    { 
     if(i==1) 
     { 
      //request 1 

     } 
     if(i==2) 
     { 
      //request 2 
     } 
     //3 to 5 

     request.HTTPMethod = @"POST"; 

    NSURLConnection *myConnection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if(myConnection) 
    { 
     HUD = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
     [email protected]"Please wait."; 
     myData = [[NSMutableData alloc] initWithLength:0]; 

    } 
    else 
    { 
     UIAlertView *alert=[[UIAlertView alloc]initWithTitle:@"Message" message:@"Connection could not be established!" delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; 
     [alert show]; 
     [alert release]; 
    } 

}// end for loop 
}//end loadPreview 

所有响应具有大量的数据,我响应数据保存到数组,但它不是等待第一个响应,使另一个请求。 finally for循环将完成,下一个视图将加载,但数组未完成,因为解析尚未完成,因为数据复制到数组中没有完成,因此出现错误。

我试图sleep(5);-(void)parserDidEndDocument:(NSXMLParser *)parser方法,但它是无效的,因为响应时间取决于网络流量。我不明白该怎么做,请帮忙。

我也试过以下的答案,但无法理解Wait for code to finish execution

+0

你试过在启动for循环之前添加等待视图,并在for循环结束后删除..? – vishy

+0

我不知道如何等待完成解析只试过睡觉(3);但它会等待特定的时间,而不会等待观看。如何实现它? –

+0

主要问题是为什么您使用回调的地方数据没有准备好作为数据准备好的回调。当最后一次调用请求完成时(但不能保证它是作为最后一次被提取和解析)而不是检查所有请求是否完成时,试图显示视图?请注意,您链接的解决方案是专门为后台线程设计的,因为它会阻塞线程,但它的性能也不是很好。 –

回答

1

我觉得你想要做同步的HTTP请求。你应该阅读关于这个link。 而且我发现这个开放源码库将帮助üASIHTTPRequest

注: ASIHTTPRequest项目业主不再为该项目支持。

0

我建议使用AFNetworking的HTTP请求。

然后你可以有一个单独的类来解析XML。

这将允许您轻松接收响应并将其传递给XML类(您将不得不创建XML解析器类的新对象来单独处理请求),并且XML将解析它。

有时当你有不同结构的不同响应时,你将不得不通知XML类当前的解析。例如

MyXMLParserClass *pars = [[MyXMLParserClass alloc] init]; 
pars.ParsingOperation=1; 

pars.ParsingOperation=2; 

然后在XML解析器类,你可以检查操作。

if(self.operationType==1) 
{ 
    // Your code 
} 
else if(self.operationType==2) 
{ 
    // your code 
} 

希望这有助于。