我打算使用NSURLConnection创建2个请求。当服务器响应并调用connectionDidFinishLoading时,它将作为参数传入连接,但如何识别传入的连接?创建多个NSURLConnections。如何识别哪个异步调用
回答
将两个NSURLConnection对象保存为您传递给connectionWithRequest:delegate:的任何委托对象的成员变量。然后,你可以比较每个那些在NSURLConnection的传递给connectionDidFinishLoading:和适当的回应:
- (void)connectionDidFinishLoading:(NSURLConnection *)connection {
if (connection == firstConnection) {
// do something
}
else if (connection == secondConnection) {
// do something else
}
}
另一个稍微面向对象的选择是创建两个不同的委托对象,其中的每一个知道如何处理与每种类型的连接。然后在创建每个连接时传递相应的委托。这样,您不需要检查以查看您拥有哪个连接,因为每个委托只会接收connectionDidFinishLoading:用于其自己的连接。
我在我的项目中做的是为连接创建一个包装类。这样,您可以为每个需要的连接保留一个新实例,并将这些类保留在另一个管理器类中。
喜欢的东西[AsynchronousConnection initWithURL:委托:选择:]
然后你就可以确保当NSURLConnection的是做正确的事是/失败。
我更喜欢每个连接的不同代表。虽然这是一个开销。幸运的是,您可以通过使用块来简化事情。这是标准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];
}];
我曾经围绕NSURLConnection
创建一个定制的包装也一样,但现在我已经切换到ASIHTTPRequest。这是一个很棒的图书馆,提供比NSURLConnection
更多的灵活性和功能。看看并尝试一下,这真的很值得。
我也使用这个,但有一个围绕这个 – coneybeare 2009-09-13 23:57:35
包装我曾经使用ASIHTTPRequest作为好吧,但不幸的是,从2011年9月起,它的作者不再支持它:http://allseeing-i.com/%5Brequest_release%5D – 2012-04-16 03:03:19
@DanJ:近来非常受欢迎的替代方案似乎是[AFNetworking](https:/ /github.com/AFNetworking/AFNetworking/)。 – 2012-07-25 16:17:45
转至NSURLConnection.h文件,你会发现下面。
创建时,NSURLConnection将执行深层副本 NSURLRequest。该副本可通过-originalRequest 方法获得。当连接执行加载时,由于协议规范化或由于以下 重定向,此请求可能会更改 。 -currentRequest可以用来检索这个值。
最终[连接currentRequest] .URL absoluteURL可能会有所帮助。
Regards, PRASANNA。
Prasanna是什么意思? – Ranjit 2014-06-06 06:26:58
- 1. 多个NSURLConnections是否创建多个NSThreads?
- 2. 如何链接异步NSURLConnections?
- 3. 如何识别(创建哪个标签)这个图片?
- 4. Android - 如何在一个Activity中创建两个异步调用?
- 5. ios - 多个异步调用
- 6. Android多个异步调用
- 7. 多个Ajax异步调用
- 8. 多个异步调用
- 9. 将多个异步调用
- 10. 进步多个异步跟踪调用
- 11. 识别哪个用户创建了连续集成(CI)构建
- 12. 哪一个使用异步或回调
- 13. 处理多个调用异步回调
- 14. 如何识别使用手势识别器轻敲哪个UIImageView?
- 15. 如何识别哪个.apk使用调试密钥签名
- 16. 如何识别哪个类正在调用特定的方法?
- 17. 在回调函数中创建一个新的异步调用
- 18. 如何识别右侧哪个ListView?
- 19. 如何识别哪个imageView被触摸?
- 20. 如何识别哪个`view`被点击?
- 21. 如何识别哪个销被挖掘
- 22. 如何识别Django中的哪个ajax?
- 23. 如何识别我在哪个线程?
- 24. 如何识别哪个用户初始化或创建了会话变量?
- 25. 的NodeJS多个异步调用
- 26. 茉莉 - 多是,一个异步调用
- 27. Node.js - 等待多个异步调用
- 28. XMLRPCPP异步处理多个调用?
- 29. 等待多个异步调用完成?
- 30. Angular 2调用多个异步方法
这不是一个非常可扩展的解决方案 – coneybeare 2009-09-13 14:40:05
不是如此可扩展,但很好的解决方案,解决了我的问题。谢谢。 – Krishna 2012-02-09 14:28:55
@cduhn是否可以继承NSURLConnection,并为其指定一个ID属性作为NSString。通过这种方式,如果每个对象都有可能需要连接的无限数量的对象(例如,接受好友请求列表),则只需将您的CustomNSURLconection的ID设置为与唯一标识对象的值相同的值例如用户ID?这样你就不必拥有数百个NSURL连接的实例。我现在无法测试这个,因此我在这里问这个问题 – pnizzle 2012-10-31 02:13:09