【问题标题】:NSURLConnection, tracking which connection is returning dataNSURLConnection,跟踪哪个连接正在返回数据
【发布时间】:2012-09-18 11:45:47
【问题描述】:

对于我正在开发的 iOS 应用程序,我目前正在编写一个单例类来处理对服务器的异步请求。这是其中一种方法的示例 -

- (void)registerUser:(CBCUserRegistration *)userRegistration delegate:(id)<CBCUserRegistrationDelegate>delegate;

在这个方法中,一个 NSURLConnection 被创建并发送一个异步请求。此时,我需要一种将委托对象绑定到 NSURLConnection 的方法,这样就可以了

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data;

被调用,我知道要通知哪个代表。因为请求是异步的,所以任何时候都可能有不止一个请求。我最初的想法是使用 NSMutableDictionary,将 NSURLConnection 设置为键,将委托设置为值,但是键被复制了,所以这是不行的。谁能建议另一种方法来跟踪这个?

提前致谢。

【问题讨论】:

    标签: objective-c ios design-patterns nsurlconnection nsmutabledictionary


    【解决方案1】:

    使用一个 NSNumber 设置为 NSURLConnection 的地址作为键,然后你可以设置另一个字典作为键的对象。你可以给它起一个名字等等,记录通知的对象等等。只要记住在释放 NSURLConnection 时删除它。

    【讨论】:

      【解决方案2】:

      避免为此使用 NSDictionary。而是采用面向对象的方法:

      编写一个类MyConnection,它实现所需的NSURLConnectionDelegate 回调并具有id&lt;CBCUserRegistrationDelegate&gt; 类型的属性/ivar。向MyConnection 添加一个start 方法,该方法创建一个NSURLConnection,为自己分配该连接的委托,然后启动它。现在,您可以为执行的每个 URL 请求创建一个 MyConnection 实例。 MyConnection 保留CBCUserRegistrationDelegate 并转发它从NSURLConnection 收到的结果。

      但是,在这里使用委托有点过时。改用块,特别是如果您的项目使用 ARC。 NSURLConnection 提供了一种方便的异步请求方法:[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]

      例如:

      - (void)registerUser:(CBCUserRegistration *)userRegistration delegate:(id<CBCUserRegistrationDelegate>)delegate
      {
          NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://mysite.com/register"]];
          [NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
                                 completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) {
              [delegate processRegistrationResponseData:data];
          }];
      }
      

      【讨论】:

      • 伟大的答案狮子座!我想我会在这个上使用块,这会简化很多事情。谢谢!
      • 不错。请记住,在 ARC 下,代表由块保留。因此,只要请求仍在进行中,委托就会被保留。
      猜你喜欢
      • 2012-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2011-09-16
      • 1970-01-01
      • 2015-03-05
      • 1970-01-01
      相关资源
      最近更新 更多