Вопросы

подсчет общего прогресса загрузки нескольких файлов с 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

Похожие записи

Rails 3 Application / User Settings — лучшая практика?

admin

Symfony: ошибка установки пакета администрирования sonata

admin

Как открыть файл Python в редакторе ожидания двойным щелчком по файлу (windows 10)

admin

Выделите термин в строке

admin

Разветвление с GitHub на Bitbucket

admin

получение ошибки при обновлении правопреемника и поля комментария в JIRA с использованием python

admin