Реализация индикатора прогресса для протокола NSURLConnectionDelegate

Я пытаюсь сделать некоторую индикацию прогресса при попытке загрузить и загрузить файл.

Читал и похоже, что это метод, который мне нужно использовать.

- (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite

Я хотел бы узнать больше о том, как работает эта функция (например, когда она вызывается и т. д.), но не могу найти справочную документацию. Я пошел по этому URL-адресу, но он ничего не говорит об этой конкретной функции.

https://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSURLConnectionDelegate_Protocol/Reference/Reference.html%23//apple_ref/occ/intf/NSURLConnectionDelegate

Где я могу прочитать об этом подробнее?

Спасибо,
Ти


person teepusink    schedule 22.02.2012    source источник
comment
Я думаю, что этот ответ может вам помочь: stackoverflow.com/questions/7803472/   -  person calinb    schedule 23.02.2012
comment
Ооо, 10 минут на написание ответа, и вы уже связали лучший ответ.   -  person Sulthan    schedule 23.02.2012


Ответы (2)


NSURLConnection имел неофициальный протокол для своего делегата. Это изменилось в iOS 5 (думаю, то же самое произошло и в OSX). Они объявили методы, объявленные в NSURLConnection, устаревшими и переместили их в формальные протоколы NSURLConnectionDelegate и NSURLConnectionDataDelegate.

А теперь самое интересное. Они объявили методы устаревшими, они даже удалили их из документации NSURLConnection, но не документировали новые формальные протоколы. В настоящее время задокументировано только NSURLConnectionDelegate. NSURLConnectionDataDelegate нигде не упоминается.

Есть два способа узнать, что делает метод.

  1. Просмотрите предыдущую версию NSURLConnection документов (например, iOS 4.3). Я бы дал ссылку, но в сети не нашел. Возможно, у вас есть библиотека, загруженная в ваш XCode

  2. #P5# <блочная цитата> #P6#
person Sulthan    schedule 22.02.2012

Попробуйте AFNetworking. Он становится популярной заменой ASIHTTPRequest, если вас это беспокоит. о поддержке. Также он имеет встроенную поддержку прогресса загрузки. (См. обсуждение по этой ссылке.) Вот недавнее обсуждение того, как его использовать.

ОБНОВИТЬ

Как отслеживать ход загрузки или скачивания? (часто задаваемые вопросы по AFNetworking)

AFURLConnectionOperation предоставляет методы setUploadProgressBlock: и setDownloadProgressBlock:. Каждый метод принимает один параметр, представляющий собой блок, который будет периодически выполняться в течение всего времени существования запроса. Блок не имеет возвращаемого типа и принимает 3 аргумента: количество байтов, прочитанных или записанных для этого обратного вызова, общее количество байтов, прочитанных или записанных на данный момент, и общее количество байтов, которые, как ожидается, будут прочитаны или записаны.

Если вы хотите обновить индикатор выполнения, вы можете установить соответствующий блок выполнения, чтобы установить количество выполнения, равное общему количеству прочитанных или записанных байтов, деленное на ожидаемое число, нормализованное между 0,0 и 1,0. Обновления пользовательского интерфейса на основе этого значения будут обновляться асинхронно по мере выполнения запроса.

person Jim    schedule 22.02.2012
comment
Почему отрицательный голос? Я хотел бы внести необходимую поправку. - person Jim; 23.02.2012
comment
Этот ответ не имеет отношения к вопросу. - person Sulthan; 23.02.2012
comment
Похоже, это прямо относилось к его первому утверждению. Я пытаюсь сделать некоторую индикацию прогресса при попытке загрузить и загрузить файл, который я не считаю не относящимся к теме. - person Jim; 23.02.2012
comment
Первое утверждение не является вопросом. Попробуйте найти вопросительный знак :) В любом случае, заставить работать интернет-соединение — настолько простая задача, что каждый программист должен знать, как это сделать. Да, он мог бы использовать лучшую структуру для достижения того, чего он хочет, но он ничему не научился бы. - person Sulthan; 23.02.2012
comment
Кстати, блок загрузки AFNetworking использует метод -[connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite], о котором он спрашивает. - person Aaron Brager; 12.02.2013