NSURLConnection,跟踪哪个连接返回数据

时间:2012-09-26 19:06:16

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

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

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

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

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

被叫,我知道哪个代表要通知。由于请求是异步的,因此可能会随时发出多个请求。我的初始是使用NSMutableDictionary,将NSURLConnection设置为键,将委托设置为值,但是密钥被复制,因此不行。任何人都可以提出另一种方法来追踪这个吗?

提前致谢。

2 个答案:

答案 0 :(得分:2)

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

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

然而,在这里使用委托有点过时了。请改用块,特别是如果您的项目使用ARC。 NSURLConnection提供了一种执行异步请求的便捷方法:NSURLConnection

例如:

[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]

答案 1 :(得分:0)

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