1

我有一个NSMutableArray包含 7 个互联网URLs,我需要从中获取HTTP标题。

我正在使用这些方法asynchronous建立联系(并且一切都很好):

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
- (void)connectionDidFinishLoading:(NSURLConnection *)connection

问题是我需要URL按照 的顺序下载每个NSMutableArray,但由于asynchronous连接的性质,顺序变得混乱。

我不想使用synchronous连接,因为它们会阻止Main Thread.

如何使用GCDon进行队列Main Thread以确保下载将遵循NSMutableArray包含 7的索引从 0 到 6 的顺序URLs

谢谢你的帮助!

4

2 回答 2

4

你不需要 GCD。您可以从第一次下载开始,然后在connectionDidFinishLoadingdidFailWithError开始下一次下载。您只需要维护当前下载的索引,以便您知道您是否已完成或接下来要开始哪个下载。

以下只是这个想法的一个草图:

// Start the first download:
self.currentDownload = 0;
request = [NSURLRequest requestWithURL:[self.myURLArray objectAtIndex:0]];
connection = [NSURLConnection connectionWithRequest:request delegate:self];

// and in connectionDidFinishLoading/didFailWithError:
self.currentDownload++;
if (self.currentDownload < self.myURLArray.count) {
    request = [NSURLRequest requestWithURL:[self.myURLArray objectAtIndex:self.currentDownload]];
    connection = [NSURLConnection connectionWithRequest:request delegate:self];
} else {
     // All downloads finished.
}
于 2012-08-27T14:32:41.737 回答
1

我认为另一种解决方案相当不灵活,使用 NSOperation 可能会更好。可以在NSHipsterApple 的文档中找到对它的一个很好的介绍。还有几个关于这个主题和这个的 Stack Overflow 问题。

于 2012-08-27T14:38:53.403 回答