我有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
答案 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
}
希望这会有所帮助。