Objective-C中的多个NSURLConnection委托

我有两个NSURLConnections。 第二个取决于第一个的内容,因此处理从连接接收的数据对于两个连接是不同的。

我只是拿起Objective-C,我想知道实现代表的正确方法是什么。

现在我正在使用:

NSURL *url=[NSURL URLWithString:feedURL]; NSURLRequest *urlR=[[[NSURLRequest alloc] initWithURL:url] autorelease]; NSURLConnection *conn=[[NSURLConnection alloc] initWithRequest:urlR delegate:self]; 

我不想用自己作为委托,我如何定义与不同委托的两个连接?

 NSURLConnection *c1 = [[NSURLConnection alloc] initWithRequest:url delegate:handle1]; NSURLConnection *c2 = [[NSURLConnection alloc] initWithRequest:url delegate:handle2]; 

我将如何创buildhandle1和handle2作为实现? 还是接口? 我真的不知道你会怎么做。

任何帮助都是极好的。

谢谢,Brian Gianforcaro

在你的示例中,你不需要启动它就可以分配一个DownloadDelegate对象。

     DownloadDelegate * dd = [DownloadDelegate alloc];

这很危险 代替:

     DownloadDelegate * dd = [[DownloadDelegate alloc] init];

另外,在@interface声明中声明你的委托响应方法并不是必须的(尽pipe它当然不会受到伤害)。 最后,你要确保你实现了连接:didFailWithError:和connectionDidFinishLoading:释放你的DownloadDelegate对象,否则你会泄漏。

很高兴你正在运行!

,虽然你的信息是有帮助的没有完全回答我问的问题。

我终于想出了如何设置我自己的代表,这正是我真正要问的。

我像这样实现它:

 @interface DownloadDelegate : NSObject - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; @end @implementation DownloadDelegate - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { } @end 

我们使用这样的代表:

 DownloadDelegate *dd = [DownloadDelegate alloc]; NSURLConnection *c2 = [[NSURLConnection alloc] initWithRequest:url delegate:dd]; 

希望能帮助任何处于同一位置的人,并再次感谢Ben的帮助。

谢谢,

布赖恩Gianforcaro

我认为以一种干净的方式处理多个连接的最好方法是保持一个委托,并用一个标签来标识每个NSURLConnection(这是一个非常简单的子类,你可以从http://www.isignmeout.com / multiple-nsurlconnections-viewcontroller / )

基本上可以用一个标识符来初始化每一个NSURLConnection,然后你可以在代理中取出这个标签,并且使用Switch-Case根据你需要的任何逻辑来处理它。

UPDATE

我已经把子类NSURLConnection变成了一个简单的类别 – 更简单,更简洁

https://github.com/Shein/Categories

代表被实现为标准的NSObject下降对象。

您可以将这两个连接指向同一个代理。

代表应该实现你想要捕获的NSURLConnectionDelegate方法(比如-connection:didReceiveData:和-connectionDidFinishLoading :)。 这些方法将被适当的委托调用。

尝试我的MultipleDownload类在http://github.com/leonho/iphone-libs/tree/master ,它为您处理多个NSURLConnection对象。

由于代表被asynchronous调用,他们可以按随机顺序调用didfinishloading。 您可以使用状态检查来确定“其他”下载是否完成,然后再继续。

我使用2个代表:

例如(这是伪oc):

 jsondelegate = [[JSonDelegate alloc]initWithCaller:self andSelector:@selector(jsonDone:)] otherdelegate = [[OtherDelegate] initWithCaller:self andSelector:@selector(otherDone:)] 

当每个委托完成时,委托通知调用者,通过调用2完成方法。

每个完成的方法接收url数据,并将其状态保存为ivar。 然后他们检查是否已经设置了另一个伊娃,如果两者都完成,则继续处理。

 if(self.jsonString && self.otherData){ continueProcessing } 

希望这可以帮助。