如何等待xml解析的多个请求的响应?

时间:2012-11-02 10:48:25

标签: iphone objective-c xml-parsing

我有5个HTML请求从Web服务获取数据。我要求进行循环。

-(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];
         HUD.labelText=@"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
  

所有响应都有大量数据,我将响应数据保存到数组中,但它不是在等待第一个响应并发出另一个请求。   最后for循环将完成,下一个视图将加载但是数组未填充,因为解析尚未完成,因为数据复制到数组中没有完成,所以有错误。

     

我在sleep(5);方法中尝试-(void)parserDidEndDocument:(NSXMLParser *)parser,但它无效,因为响应时间取决于网络流量。我无法理解该怎么做请帮助。

     

我尝试了以下答案,但无法理解Wait for code to finish execution

3 个答案:

答案 0 :(得分:1)

我想你想做同步http请求。你应该读一下这个link。 我发现这个开源库将帮助你ASIHTTPRequest

注意: ASIHTTPRequest项目所有者不再支持该项目。

答案 1 :(得分:1)

可能您正在使用具有相同委托的异步方法。 这意味着您可以同时发出5个请求。

您可以在Grand Central Dispatch中排队: http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/

答案 2 :(得分: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
}

希望这会有所帮助。