同一个类中的多个URL调用

时间:2013-01-05 13:04:41

标签: iphone

我是iphone开发的新手可以有人帮我解决这个问题,从一个星期我面临一个问题,就是我有多个网址如下

for (int i=0;i<=[listingAffArray];i++)
    NSString *urlStr=[NSString stringWithFormat:@"http://demo.holidayjuggle.net:7777/services/inventoryservice/%@/%@/stores/search?location=12.971598700000000000,77.594562699999980000,50",appDelegate.buyingAff,[appDelegate.listingAffArray objectAtIndex:i]];
}

在这个我收到所有网址的回复,但在didfinishloading无法找到哪些网址回复

NSURL *url=[NSURL URLWithString:urlStr];

NSMutableURLRequest *req=[NSMutableURLRequest requestWithURL:url];

[req setHTTPMethod:@"GET"];

[req setValue:@"application/json" forHTTPHeaderField:@"Accept"];
[req setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];

connection=[NSURLConnection connectionWithRequest:req delegate:self];
if(connection){
    NSLog(@"connection is successfull "); 
}
else{
    NSLog(@"connection failed");
}

-(void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{ 
    responseData=[[NSMutableData alloc]init]; 
}

-(void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    [responseData appendData:data]; 
}

-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    NSString *strResponse=[[NSString alloc]initWithData:responseData encoding:NSUTF8StringEncoding];

}

在responsedata中只有最后的url数据在那里我放置了断点并且观察到每个url正在调用didfinishloading,当第二个url正在调用时它正在响应secondurl调用,就像在responsedata中那样,最后的url数据只在那里。如何存储每个响应数据单独

提前致谢

sivakumari

3 个答案:

答案 0 :(得分:0)

在班级中创建一个数组,并将每个strResponse存储在数组中(使用addObject)。

此外,这没有意义:

for (int i=0;i<=[listingAffArray];i++)
    NSString *urlStr=[NSString stringWithFormat:@"http://demo.holidayjuggle.net:7777/services/inventoryservice/%@/%@/stores/search?location=12.971598700000000000,77.594562699999980000,50",appDelegate.buyingAff,[appDelegate.listingAffArray objectAtIndex:i]];
}

[listingAffArray]部分应该给你一个编译器错误,即使它确实有效,你也会在每次循环时覆盖相同的变量。

答案 1 :(得分:0)

是的,它发生是因为所有NSURLConnection共享同一个委托相同的对象,即“自我”

如果你想加载多个URL,你应该有多个空间来存储这些数据。

因此,responseData的一个对象是不够的。

我可以用很多方式建议我使用的那个。

  • 声明NSMutableDictionary对象
  • NSURLConnection对象存储为关键字,将NSMutableData对象存储为值,这样如果您有3个网址,则NSMutableDictionary中有3个网址。
  • NSURLConnection的每个委托方法中,仅将数据附加到相应的NSMutableData对象。

告诉我你是否需要更多帮助......

答案 2 :(得分:0)

尝试以异步方式使用url调用Web服务。 ie.Hit第一个url,当你收到第一个url的结果时,点击第二个url请求。之后,当您收到第二个网址响应时,请点击第三个网址请求。

这些所有请求都应该在后台线程或新线程中运行,这样它就不会影响主线程。

同样采用类似

的枚举数据类型
enum {
  requestOne=0,
  requestTwo,
  requestThree,
  requestFour
}currentRequest;

当你开始点击currentRequestData中的第一个url assign requestOne并在响应中检查这个enumDataType。收到响应后,使用seconod枚举类型

命中第二个URL