2009-09-12 33 views

回答

12

将两个NSURLConnection对象保存为您传递给connectionWithRequest:delegate:的任何委托对象的成员变量。然后,你可以比较每个那些在NSURLConnection的传递给connectionDidFinishLoading:和适当的回应:

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

另一个稍微面向对象的选择是创建两个不同的委托对象,其中的每一个知道如何处理与每种类型的连接。然后在创建每个连接时传递相应的委托。这样,您不需要检查以查看您拥有哪个连接,因为每个委托只会接收connectionDidFinishLoading:用于其自己的连接。

+3

这不是一个非常可扩展的解决方案 – coneybeare 2009-09-13 14:40:05

+0

不是如此可扩展,但很好的解决方案,解决了我的问题。谢谢。 – Krishna 2012-02-09 14:28:55

+0

@cduhn是否可以继承NSURLConnection,并为其指定一个ID属性作为NSString。通过这种方式,如果每个对象都有可能需要连接的无限数量的对象(例如,接受好友请求列表),则只需将您的CustomNSURLconection的ID设置为与唯一标识对象的值相同的值例如用户ID?这样你就不必拥有数百个NSURL连接的实例。我现在无法测试这个,因此我在这里问这个问题 – pnizzle 2012-10-31 02:13:09

1

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

喜欢的东西[AsynchronousConnection initWithURL:委托:选择:]

然后你就可以确保当NSURLConnection的是做正确的事是/失败。

2

我更喜欢每个连接的不同代表。虽然这是一个开销。幸运的是,您可以通过使用块来简化事情。这是标准SDK中尚不存在的新功能,但您可以使用3rd-party framework called PLBlocksHere 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]; 
}]; 
1

我曾经围绕NSURLConnection创建一个定制的包装也一样,但现在我已经切换到ASIHTTPRequest。这是一个很棒的图书馆,提供比NSURLConnection更多的灵活性和功能。看看并尝试一下,这真的很值得。

+0

我也使用这个,但有一个围绕这个 – coneybeare 2009-09-13 23:57:35

+0

包装我曾经使用ASIHTTPRequest作为好吧,但不幸的是,从2011年9月起,它的作者不再支持它:http://allseeing-i.com/%5Brequest_release%5D – 2012-04-16 03:03:19

+1

@DanJ:近来非常受欢迎的替代方案似乎是[AFNetworking](https:/ /github.com/AFNetworking/AFNetworking/)。 – 2012-07-25 16:17:45

0

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

转至NSURLConnection.h文件,你会发现下面。

创建时,NSURLConnection将执行深层副本 NSURLRequest。该副本可通过-originalRequest 方法获得。当连接执行加载时,由于协议规范化或由于以下 重定向,此请求可能会更改 。 -currentRequest可以用来检索这个值。

最终[连接currentRequest] .URL absoluteURL可能会有所帮助。

Regards, PRASANNA。

+0

Prasanna是什么意思? – Ranjit 2014-06-06 06:26:58