如何在iphone中连续调用nsurlconnection委托方法

时间:2012-08-21 06:17:47

标签: iphone json

嗨,在我的一个申请中。我必须连续多次向服务器(json服务器)发送请求。我的网址将如下所示

@ “http://185.185.116.51/servername/serverjspfilesname.jsp?filterID=21&ticket=65675656565656567”

实际上我有很多过滤器ID(你可以在顶部找到过滤器ID)。为了按顺序连接过滤器我用于循环,如下所述

for(int i=0;i<[appdelegate.listOfFiltersArray count];i++)
    {

        filtersDataModelObject=[[ListOfFiltersDataModel alloc]init];

        filtersDataModelObject=[appdelegate.listOfFiltersArray objectAtIndex:i];

       homescreenstring=[NSString stringWithFormat:@"http://%@/servername/serverjspfilesname.jsp?filterID=%@&ticket=%@",Ip,filtersDataModelObject.filterID,[storeData stringForKey:@"securityTicket"]];


        NSLog(@"url is %@",homescreenstring);

        NSURLRequest *request=[NSURLRequest requestWithURL:[NSURL URLWithString:homescreenstring]];

        connection=[[NSURLConnection alloc]initWithRequest:request delegate:self];

        if(connection)
        {

            homeScreenResponseData=[[NSMutableData alloc]init];

        }
        else
        {

            NSLog(@"connection failed");
        }

    }

实际上在for循环中满足每个条件后,我必须使用nsurlconnection委托方法与服务器连接以从服务器获取数据。但是在完成执行for循环之后,只有nsurlconnection委托方法正在执行最后一个filterid,它来自appdelegate.listOfFiltersArray数组。

但我想为每个filterid调用服务器。

如果有人知道请告诉我。谢谢。

2 个答案:

答案 0 :(得分:0)

在.h文件中创建一个计数变量int count。

 int count = 0 //in .m file

现在使用此方法:

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
  //one request finished
  count ++;
  //request another using count
}

答案 1 :(得分:0)

Prince建议的解决方案不是通用的,因为你将面临定义问题的问题 每个请求都有“filterid”。

你正在做的是一个糟糕的方法。不要将Web请求与您的业务逻辑代码混合.Web内容应由处理整个应用程序中所有请求的单独文件处理。该课程将实施授权。

对于委派,您需要执行以下操作。 在您的网络类标题(Networkclass.h)中添加协议

@protocol NetworkControllerDelegate <NSObject>
-(void) UrlResponseRecieved :(NSData *)responseData;
-(void) UrlResponseFailed:(NSError *)error;
@end

并在NetworkClass.m(实现fie)中执行以下操作

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{
    if (receivedData != nil) 
    {
       if([delegate respondsToSelector:@selector(UrlResponseRecieved:)])
        [self.delegate UrlResponseRecieved:receivedData];
        [receivedData release];
        receivedData = nil;
    }
    [connection release];
}

如果您仍然卡住,可以参考以下内容 What's wrong on following URLConnection?

或者您可以先阅读任何异步下载教程。