AFNetworking - загрузка нескольких файлов + мониторинг через UIProgressView - PullRequest
11 голосов
/ 29 января 2012

Я пытаюсь изменить свой код с ASIHTTPRequest на AFNetworking.В настоящее время я хочу выбрать 10-15 различных HTTP-URL (файлов) и загрузить их в папку с документами.

С ASIHTTPRequest это было довольно легко с

[myQueue setDownloadProgressDelegate:myUIProgressView];

В AFNetworking я не могу понять, как это сделать.У меня есть следующий код, который загружает файлы, сохраняет их и уведомляет об успешной загрузке файла, но я не могу создать индикатор выполнения для этой очереди с общим размером.

for (i=0; i<3; i++) {

    NSString *urlpath = [NSString stringWithFormat:@"http://www.domain.com/file.zip"];
    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:[NSString stringWithFormat:@"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];  
}

Ответы [ 3 ]

12 голосов
/ 30 января 2012

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

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

Затем просто обновите индикатор выполнения:

[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);
}];
1 голос
/ 08 июля 2013
[operation setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {

    float percentDone = ((float)((int)totalBytesRead) / (float)((int)totalBytesExpectedToRead));

    progressView.progress = percentDone;

}];
0 голосов
/ 29 октября 2013

Представьте, что вы загружаете 200+ файлов таким образом, предполагая размер файла 1 МБ каждый.Что происходит, когда вы создаете такую ​​группу запросов (с тайм-аутом по умолчанию 30 с)?Через 30 секунд вас будут бомбить из-за ошибок тайм-аута.

...