代码之家  ›  专栏  ›  技术社区  ›  Xetius

创建多个nsurlconnections。如何识别哪个异步调用

  •  10
  • Xetius  · 技术社区  · 15 年前

    我打算使用nsurlconnection创建2个请求。当服务器响应并调用ConnectionDidFinishLoading时,它在连接中作为参数传递,但如何标识传入的连接?

    5 回复  |  直到 12 年前
        1
  •  12
  •   cduhn    15 年前

    将两个nsurlConnection对象都保存为传递给ConnectionWithRequest:Delegate:的任何委托对象的成员变量。然后,您只需将这些连接与传递给ConnectionDidFinishLoading:的nsurlConnection进行比较,并做出相应的响应:

    - (void)connectionDidFinishLoading:(NSURLConnection *)connection {
        if (connection == firstConnection) {
            // do something
        }
        else if (connection == secondConnection) {
            // do something else
        }
    }
    

    另一个稍微面向对象的选项是创建两个不同的委托对象,每个委托对象都知道如何处理每种类型的连接。然后,只需在创建每个连接时传递适当的委托。这样,您就不需要检查您拥有的连接,因为每个委托将只接收ConnectionDidFinishLoading:作为其自己的连接。

        2
  •  2
  •   zakovyrya    15 年前

    对于每个连接,我也喜欢不同的代表。虽然有点开销。幸运的是,您可以通过使用块来简化事情。这是一个在标准SDK中尚不存在的新功能,但是 3rd-party framework called PLBlocks 你已经可以使用了。 Here is an article 关于如何使用它们,它还包含nsurlconnection的示例。

    这是使用块回调发出HTTP请求的客户端代码:

    NSURLRequest *req = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://www.google.com"]];
    [NSURLConnection sendAsynchronousRequest:req onCompletionDo: ^(NSData *data, NSURLResponse *res, NSError *err) {
        NSLog(@"data: %ld bytes. res: %@, error: %@", (long)[data length], res, err);
        [cell.activity stopAnimating];
    }];
    
        3
  •  1
  •   Daniel Rinser    15 年前

    我曾经创建了一个自定义包装 NSURLConnection 也一样,但我现在改为 ASIHTTPRequest . 这是一个非常棒的库,提供了比 非连接 . 看看,试试看,真的很值得。

        4
  •  1
  •   coneybeare    14 年前

    我在项目中所做的就是为连接创建一个包装类。这样,您就可以为所需的每个连接保留一个新实例,并在另一个管理器类中维护这些类。

    类似于[AsynchronicConnectionInitWithURL:Delegate:Selector:]

    然后,可以确保在完成/失败nsurlconnection时调用正确的东西。

        5
  •  0
  •   Prasanna    12 年前

    请不要参考 https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSURLConnection_Class/Reference/Reference.html

    转到nsurlconnection.h文件,您将找到以下内容。

    创建时,nsurlConnection将执行 NSURLRequest。此副本可通过-originalrequest获得 方法。当连接执行加载时,此请求可能会更改 由于协议规范化或以下原因 重定向。-当前请求可用于检索此值。

    最终[connection currentRequest].url绝对值url可能会有所帮助。

    当做, 普拉桑纳。