1

ヘッダーを取得する必要があるNSMutableArray7つのインターネットが含まれています。URLsHTTP

私はこれらのメソッドを使用して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.

ダウンロードが7を含む私の0から6までのインデックスの順序に従うことを保証するためにを使用GCDしてキューを作成するにはどうすればよいですか?Main ThreadNSMutableArrayURLs

ご協力いただきありがとうございます!

4

2 に答える 2

4

そのためにGCDは必要ありません。最初のダウンロードから開始して、次のダウンロードを開始することができconnectionDidFinishLoadingますdidFailWithError。現在のダウンロードのインデックスを維持するだけでよいので、終了したかどうか、または次にどのダウンロードを開始するかを知ることができます。

以下は、このアイデアの単なるスケッチです。

// 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のドキュメントで見つけることができます。このトピックとこれに関するいくつかのスタックオーバーフローの質問もあります。

于 2012-08-27T14:38:53.403 に答える