嗨,在我的一个申请中。我必须连续多次向服务器(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调用服务器。
如果有人知道请告诉我。谢谢。
答案 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?
或者您可以先阅读任何异步下载教程。