每当我使用以下代码进行卷曲调用时:
NSURL *url = [NSURL URLWithString:requestURL];
NSURLRequest *request = [NSURLRequest requestWithURL:url
cachePolicy:NSURLRequestReloadIgnoringLocalCacheData
timeoutInterval:30];
if (connectionInProgress) {
[connectionInProgress cancel];
}
connectionInProgress = [[NSURLConnection alloc]initWithRequest:request delegate:self startImmediately:YES];
connectionDidFinishLoading是我的最终目的地,我可以操作响应数据并调用我的下一个方法继续使用该应用程序。如果我硬编码某些特定任务,如
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSXMLParser *parser = [[NSXMLParser alloc] initWithData:xmlData];
[parser setDelegate:self];
[parser parse];
[someLabel setText:parsedTextFromXMLData];
}
如果我需要对另一个地址进行另一个curl调用,那么someLabel setText是否总是会重新设置?有没有办法让这个委托函数在每个curl调用上表现不同? (顺便说一下,connectionDidFinishLoading通常是放置下一步代码的正确位置吗?)如果是这样,那么下次卷曲调用是否会再次调用它?
答案 0 :(得分:1)
有两个选项可以做到这一点:
对我来说,选项1将是更好的方法
答案 1 :(得分:1)
请查看此S.O. post以获取有关NSURLConnection
和多个请求的食谱。建议如下:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == firstConnection) {
// do something
}
else if (connection == secondConnection) {
// do something else
}
}
编辑:这里的想法是connectionDidFinishLoading
是你自己的委托的一个方法(所以你写它)。在委托中,您存储您创建的每个连接的地址;然后,当连接返回数据时,通过将其地址与存储在委托中的地址进行比较,可以确定它是哪个连接。 -END编辑
另一个选择是使用ASIHTTPRequest
framework,它提供基于请求(而不是基于连接)的委托机制,因此每个请求都有一个委托对象来处理结果;或者换句话说,代表收到对请求的引用,因此您可以轻松地告知您正在处理哪个请求结果。
ASIHTTPRequest
提供了一些优于NSURLConnection的优势。您可以在此S.O. post中了解它们。