Отслеживание выполнения индивидуального запроса в ASINetworkQueue

#iphone #background #download #asihttprequest

#iPhone #предыстория #Скачать #asihttprequest

Вопрос:

Мне нужно было загрузить некоторые файлы при нажатии кнопок на TableViewCells.

Я подумывал о том, чтобы добавить их в ASINetworkQueue, чтобы загрузка могла произойти. Однако, когда я дошел до отслеживания прогресса, мне кажется, что они говорят, что у меня может быть только ОДИН ПРОГРЕСС для ВСЕЙ ОЧЕРЕДИ.

Это правда, или есть способ, которым я могу отслеживать выполнение каждого запроса в отдельности? Мне нужно иметь пользовательский tableview, который показывает, сколько из каждого файла было загружено.

кроме того, на не очень связанном примечании, могу ли я установить

 [request setShouldContinueWhenAppEntersBackground:YES];
  

для запросов ВНУТРИ сетевой очереди?
Мне нужна поддержка фоновой загрузки, и если networkqueue ее не поддерживает, я мог бы с таким же успехом отказаться от идеи прямо сейчас и поискать какой-нибудь другой способ.

Ответ №1:

В документации упоминается:

У каждого ASIHTTPRequest есть два делегата, которые можно использовать для отслеживания прогресса — downloadProgressDelegate (для загрузок) и uploadProgressDelegate (для выгрузки).

Вы все равно можете использовать эти делегаты для запроса, даже если запрос является частью очереди.

Сетевая очередь просто управляется событиями, исходящими от самих запросов (и запросы продолжают оставаться частью очереди, даже если они выполняются в фоновом режиме). Я считаю, что если вы пометите запросы для продолжения в фоновом режиме, то события очереди тоже продолжатся.

Комментарии:

1. Спасибо! Но когда я использовал downloadProgressDelegate и назначил его элементу управления UIProgressView, я мог получить только процент завершения. Как мне получить информацию, например, о выполнении 3 мб / 21 мб?

2. downloadProgressDelegate получает информацию, необходимую для отображения 3 мб / 21 мб — вам нужно создать пользовательское представление, чтобы показать именно то, что вы хотите; если вы не уверены, как это сделать, попробуйте задать новый вопрос.

3. Спасибо. После некоторого ковыряния я заставил его работать. Что мне было нужно, так это [запрос setDidRecieveDataSelector:….] В этом я использовал request.TotalBytesRead и request.ContentLength. Мне пришлось преобразовать их в значения с плавающей точкой, чтобы заставить деления работать должным образом, но в конце концов сработало. 🙂

4. @JosephH У меня возникли проблемы с DidReceiveDataSelector. При использовании этого не происходит загрузка в файл, хотя я могу создавать пользовательские строки с «Выполнено 3248 КБ / 4993 КБ» и тому подобное… Есть ли способ, которым я могу использовать downloadProgessDelegate для выполнения того же самого, чтобы это не повлияло на мой setDownloadPath? setDownloadProgressDelegate принял только 1 аргумент, и это был мой UIProgressView. Не знаю, как я мог бы загрузить Kbs с этого. : (

5. @mvishnu Задайте делегатом выполнения свой собственный класс и реализуйте метод request:didReceiveBytes: (и заставьте его вызывать UIProgressView setProgress). Или UIProgress подкласса просмотр и реализация запроса:didReceiveBytes: в вашем подклассе.