2011-12-07 16 views
5

私はこのコードを使用して、複数のファイルをダウンロードしてディスクに書き込むために配列をループします。複数のファイルをダウンロードするAFnetworking

-(void)download 
{ 
//set url paths 
for (NSString *filename in syncArray) 
{ 
    NSString *urlpath = [NSString stringWithFormat:@"http://foo.bar/photos/%@", filename]; 
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:urlpath]]; 
    AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *path = [[paths objectAtIndex:0] stringByAppendingPathComponent:filename]; 
operation.outputStream = [NSOutputStream outputStreamToFileAtPath:path append:NO]; 

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"Successfully downloaded file to %@", path); 
} failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
    NSLog(@"Error: %@", error); 
}]; 


[operation start]; 

が、問題は、各ファイルが行われた後、それは(それがすべき)、成功ブロックを呼び出しますが、私はちょうどいくつかのデータをリロードし、進捗状況HUDを終了するために戻って1つの最後の呼び出しが必要です。

正しい方向のポインタがあればいいでしょう。

+0

こんにちは、 どこでこの機能を呼び出しますか? AppDelegateまたは特定のコントローラでは? また、ダウンロードが完了する前にアプリが終了した場合はどうなりますか? ありがとう、 – manishKungwani

答えて

5

これはいつか誰かを助けてくれるかもしれませんが、おそらく大きな問題はあるかもしれないが、私の単純な使い方のための大丈夫な回避策を使用することができました。

シンク配列から各行を削除した後、必要なコードを実行しました。

[operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 
    NSLog(@"Successfully downloaded file to %@", path); 
    [SVProgressHUD showWithStatus:@"Updating Photos"]; 
    [syncArray removeObject:filename]; 
    if (!syncArray || !syncArray.count) 
    { 
    NSLog(@"array empty"); 
     [[NSNotificationCenter defaultCenter] postNotificationName:@"TestNotification" object:self]; 
     [SVProgressHUD dismissWithSuccess:@"Photos Updated"]; 
    } 
5

あなたはenqueueBatchOperationsにAFHTTPClientを使用することができ、これは、すべての操作が終了したときに呼び出されcompletionBlockを持っています。あなたが探しているものと正確に一致するはずです。

+0

私は同意する、これはより良い解決策です。 – ajmccall

+1

リンクページは現在ご利用いただけません...... –