подсчет общего прогресса загрузки нескольких файлов с AFNetworking

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

но проблема в том, что я не знаю, как рассчитать общий прогресс.

вот что я делаю: сначала я добираюсь до totalBytes, ожидаемых от всех файлов:

for (NSURL candidateUrl in UrlsList) { NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:candidateURL]; //setting HTTPMethod of request from GET to HEAD to download header files of requests, so we can get file size before downloaing file [request setHTTPMethod:@»HEAD»]; getTotalImagesBytesOperation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [getTotalImagesBytesOperation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { //setting totalImagesBytesExpectedToRead of all images. we use it to know how many bytes we should download for all the images totalImagesBytesExpectedToRead += [operation.response expectedContentLength]; } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@»Error: %@», error); }]; [operationQueue addOperation:getTotalImagesBytesOperation]; }

после оценки общего размера файлов:

//downloading images for (NSURL *imageUrl in imagesURLList) { NSURLRequest *request = [NSURLRequest requestWithURL:imageUrl]; AFImageRequestOperation *downloadImageOperation = [AFImageRequestOperation imageRequestOperationWithRequest:request imageProcessingBlock:nil success: ^(NSURLRequest *request, NSHTTPURLResponse *response, UIImage *image) { NSLog(@»success») } failure: ^(NSURLRequest *request, NSHTTPURLResponse *response, NSError *error) { NSLog(@»%@», [error localizedDescription]); }]; [operationQueue addOperation:downloadImageOperation]; [downloadImageOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { **HOW TO CALCULATE TOTAL PROGRESS** }

Я не знаю, как рассчитать общий размер !! значения, которые у нас есть: totalBytesOfAllTheFiles, totalBytesRead и totalBytesExpectedToRead для текущего файла, который дает вам вышеуказанный метод, indexOfCurrentFile и countOfFiles.

будьте осторожны, setDownloadProgressBlock вызывается сотнями раз.

у кого-нибудь есть идеи? (извините за плохое форматирование кода!)

Не могли бы вы просто разделить totalBytesRead на totalBytesExpectedToRead?   —  person Hashem Aboonajmi    schedule 07.09.2014

@ evan.stoddard totalBytesRead/totalBytesExpectedToRead дает мне процент завершения текущего файла. не все файлы!   —  person Hashem Aboonajmi    schedule 07.09.2014

Первое соображение: вам действительно нужно быть настолько точным, чтобы использовать общее количество байтов для расчета прогресса? Я использовал общее количество загруженных файлов / общее количество файлов, которые нужно загрузить, чтобы рассчитать прогресс приложения. Это намного проще.   —  person Hashem Aboonajmi    schedule 07.09.2014

Подумайте о том, когда ваши первые пять файлов имеют общий размер 1 МБ, а последние пять файлов — 100 МБ. этот расчет не годится.   —  person Hashem Aboonajmi    schedule 07.09.2014

В этом случае единственным способом может быть считывание информации об общем размере из файла данных где-нибудь в сети до начала загрузки. Если это невозможно, вам придется переосмыслить дизайн своего приложения. Вы не можете узнать размер всех файлов до их загрузки.   —  person Hashem Aboonajmi    schedule 08.09.2014

Источник: ledsshop.ru

Стиль жизни - Здоровье!