我是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
答案 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