AFNetworking – Télécharger plusieurs files + surveillance via UIProgressView

J'essaye de changer mon code de ASIHTTPRequest à AFNetworking. Actuellement, je veux sélectionner 10-15 différentes URL HTTP (files) et les download dans un dossier de documents.

Avec ASIHTTPRequest c'était assez facile avec

[myQueue setDownloadProgressDelegate:myUIProgressView]; 

Dans AFNetworking je ne peux pas comprendre comment le faire. J'ai le code suivant qui télécharge les files, les stocke et notifie quand un file se télécharge avec succès, mais je ne peux pas créer la barre de progression pour cette queue avec la taille totale.

 for (i=0; i<3; i++) { NSSsortingng *urlpath = [NSSsortingng ssortingngWithFormat:@"http://www.domain.com/file.zip"]; NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithSsortingng:urlpath]]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); NSSsortingng *path = [[paths objectAtIndex:0] ssortingngByAppendingPathComponent:[NSSsortingng ssortingngWithFormat:@"testFile%i.zip",i]]; 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 setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { NSLog(@"Sent %d of %d bytes, %@", totalBytesWritten, totalBytesExpectedToWrite, path); }]; [myQueue addOperation:operation]; } 

Je pense que vous devrez créer votre propre UIProgressView, que j'appellerai progressView pour l'exemple.

 progressVu = [[UIProgressView alloc] initWithFrame:CGRectMake(x, y, width, height)]; [progressVu setProgressViewStyle: UIProgressViewStyleDefault]; 

Ensuite, mettez à jour la barre de progression:

 [operation setDownloadProgressBlock:^(NSInteger bytesWritten, NSInteger totalBytesWritten, NSInteger totalBytesExpectedToWrite) { float percentDone = ((float)((int)totalBytesWritten) / (float)((int)totalBytesExpectedToWrite)); progressView.progress = percentDone; NSLog(@"Sent %d of %d bytes, %@", totalBytesWritten, totalBytesExpectedToWrite, path); }]; 
 [operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { float percentDone = ((float)((int)totalBytesRead) / (float)((int)totalBytesExpectedToRead)); progressView.progress = percentDone; }]; 

Imaginez que vous téléchargiez plus de 200 files de cette façon en supposant une taille de file de 1 Mo chacun. Que se passe-t-il lorsque vous créez un tel groupe de requêtes (avec un timeout d'attente par défaut de 30 secondes)? Juste après 30 secondes, vous serez bombardé par des erreurs de timeout.

Justin Martin