AFnetworking загрузка нескольких файлов - PullRequest
5 голосов
/ 07 декабря 2011

Я использую этот код для обхода массива для загрузки нескольких файлов и записи на диск.

-(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.

Любые указатели в правильном направлении были бы хороши.

Ответы [ 2 ]

5 голосов
/ 31 января 2013

Вы можете использовать AFHTTPClient для enqueueBatchOperations , и это имеет блок завершения, который вызывается, когда все операции завершены. Должно быть именно то, что вы ищете.

5 голосов
/ 07 декабря 2011

Может быть, когда-нибудь это кому-нибудь поможет, но я смог использовать обходной путь, у которого, вероятно, есть серьезные проблемы, но он подходит для моего простого использования.

Я просто удалил каждую строку из массива синхронизации после ее обработкизатем запустил мой код, который мне был нужен.

 [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"];
    }
...