如何从 NSURLConnection 委托发送多个 url 请求?
Posted
技术标签:
【中文标题】如何从 NSURLConnection 委托发送多个 url 请求?【英文标题】:How can I send multiple url request from a NSURLConnection delegate? 【发布时间】:2012-02-17 09:59:21 【问题描述】:这是我的应用程序的逻辑流程:
首先,当视图控制器完成加载后,NSURLConnection
请求就可以开始执行了
响应包含在 xml 数据中
解析该 xml 后,我需要发送另一个 NSURLConnection
请求。
发送第二个请求后,如果响应ok,则收到其他xml数据
解析第二个xml后,我必须检查第一个和第二个xml数据之间的一些问题。
那么,是否可以发送多个请求?如何?我不需要代码,你解释一下就行了。
提前谢谢你。
【问题讨论】:
你是从一个类还是多个类发送多个请求?? 我从一个班级发送多个请求。 【参考方案1】:我用 NSURLConnection 来做这件事,让它们成为属性,然后检查它是哪一个:
@property (nonatomic,retain) NSURLConnection *myConnection;
@property (nonatomic,retain) NSURLConnection *mySecondConnection;
然后在委托中:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
if (connection == myConnection)
//do something
if (connection == mySecondConnection)
// do something else
您可以将您的 NSURLRequest 传递给连接:
self.myConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
【讨论】:
简单优雅的解决方案!谢谢:) +1 这应该是接受的答案,而不是发送接受的答案中建议的同步请求。 我同意。这是一个更好的解决方案。【参考方案2】:有一个第三方库可用,它是 CFNetwork 上的包装器ASIHTTPREQUEST
这个库应该为你工作。这样您就不必从头开始编写代码。另一种选择是创建一个类,该类将负责创建NSURLConnection
,然后发送请求,最后使用委托或通知接收到一个数据通知视图控制器。
【讨论】:
该类不符合 ARC。更好地使用 NSURLConnection。 这是一个很好的解决方案,但我相信作者已经放弃了它。所以我会给它一个+1,但应该注意的是,虽然它是相关的,但它不再是了。 不再使用这个库,但它确实是一个很棒的库——希望有人能维护它。无法使用此库连接某些 HTTPS 服务器。【参考方案3】:- (void)viedDidLoad
[super viewDidLoad];
[self firstRequestMethod];
- (void)firstRequestMethod
NSString *myFirstRequestURL = @"<URL>";
NSURL *webURL = [NSURL URLWithString:myFirstRequestURL];
NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSError *error;
NSURLResponse *response;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(returnData)
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
//Parse your response here.
//Is desired response obtain call the second Request, as described above
if (TRUE) //on success
[self secondRequestMethod];
- (void)secondRequestMethod
NSString *mySecondRequestURL = @"<URL>";
NSURL *webURL = [NSURL URLWithString:mySecondRequestURL];
NSURLRequest *request = [NSURLRequest requestWithURL:webURL cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSError *error;
NSURLResponse *response;
NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
if(returnData)
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSASCIIStringEncoding];
//Parse your response here.
//Is desired response obtain call the second Request, as described above
if (TRUE) //on success
//subsequent calls to other url, same as above
希望这能帮助你更好地理解......
【讨论】:
可以告诉我完整的过程吗?我得到了你的答案,但我不知道我该如何继续孔过程。一步一步写过程,我以前没有使用过这种工作。 您可以使用 NSDictionary 在两种方法之间进行维护,以便您可以在 secondRequestMethod 以及后续的 url 方法中传递您希望检查和比较的值。那不会对你来说很重要...... 一开始就使用同步请求是个坏主意,很好解释here @Nikhita,同步请求有利有弊,我们必须根据需要使用它们。在上述情况下使用 Async req 是不值得的。这篇文章是为了向用户解释同步调用。 这不是一个很好的答案。同步请求可能会锁定 UI,使用户不愉快的应用程序。最好使用异步线程,这样用户就不会认为应用程序“冻结”了它们。 (而且它实际上并没有回答问题)。以上是关于如何从 NSURLConnection 委托发送多个 url 请求?的主要内容,如果未能解决你的问题,请参考以下文章
NSURLConnection(作为 AFNetworking 的一部分)不调用 NSURLConnectionDataDelegate 委托