2011-12-07 11 views
5

Birden çok dosya indirmek ve diske yazmak için bir dizinin içinden geçmek için bu kodu kullanıyorum.Birden çok dosyayı karşıdan yükleme 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]; 

ama sorun o her dosya bittikten sonra başarı bloğunu, (olması gerektiği) çağırır ama sadece bazı verileri yeniden ve bir ilerleme HUD sonuna kadar geri bir final çağrıyı ihtiyaç olduğunu.

Doğru yönde herhangi bir işaretçi harika olurdu.

+0

Hey, Bu işlevi nerede kullanıyorsunuz? AppDelegate'de veya belirli bir kontrolörde mi? Ayrıca, indirme işlemi bitmeden uygulamadan çıkılırsa ne olur? Teşekkürler – manishKungwani

cevap

5

Belki bir gün bu birilerine yardımcı olacaktır, ancak büyük sorunların olduğu ancak benim basit kullanımım için uygun olan bir geçici çözüm kullanabildim.

Senkronizasyon dizisinden her satırı işlendikten sonra sildim sonra koduma ihtiyacım vardı.

[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

Sen enqueueBatchOperations için AFHTTPClient kullanabilir ve bu tüm işlemler bittiğinde çağrılan bir completionBlock vardır. Tam olarak aradığın şey olmalı.

+0

Katılıyorum, bu daha iyi bir çözüm. – ajmccall

+1

Bağlantı sayfası şu anda kullanılamıyor ...... –