0

我有 5 个 html 请求从 Web 服务获取数据。我在 for 循环中请求。

-(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

所有响应都有很多数据,我将响应数据保存到数组中,但它不等待第一个响应并发出另一个请求。finally for 循环将完成并且下一个视图将加载但数组未填充,因为尚未完成解析,因为尚未完成将数据复制到数组中,因此出现错误。

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

我也尝试了以下答案,但无法理解等待代码完成执行

4

3 回答 3

1

我想你想做同步http请求。您应该阅读有关此链接的信息。我发现这个开源库会帮助你ASIHTTPRequest

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

于 2012-11-02T11:13:39.900 回答
1

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

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

于 2012-11-02T11:15:44.267 回答
0

我建议对 HTTP 请求使用AFNetworking

那么你可以有一个单独的类来进行 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
}

希望这可以帮助。

于 2012-11-02T20:29:35.117 回答