如何从 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 是不是保留其委托?

与 NSURLConnection 委托方法相关的查询

NSURLConnection 委托方法未执行 [关闭]

NSURLConnection(作为 AFNetworking 的一部分)不调用 NSURLConnectionDataDelegate 委托

在 Apple 的开发人员文档中找不到所需的 NSURLConnection 委托方法。为啥?

带有 NSURLConnection 的网络管理器