Реализация индикатора прогресса для протокола NSURLConnectionDelegate - PullRequest
0 голосов
/ 23 февраля 2012

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

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

- (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

Где я могу узнать больше об этом?

Спасибо,
Тройник

Ответы [ 2 ]

2 голосов
/ 23 февраля 2012

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

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

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

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

  2. Нажмите cmd-shift-o в Xcode, введите NSURLConnectionDataDelegate и нажмите ввод.Вы нашли заголовок, и у методов есть описание:

    connection: didSendBodyData: totalBytesWritten: totalBytesExpectedToWrite: вызывается во время операции загрузки, чтобы обеспечить обратную связь о ходе выполнения.Обратите внимание, что значения могут изменяться неожиданным образом, если запрос необходимо передать повторно.

0 голосов
/ 23 февраля 2012

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

ОБНОВЛЕНИЕ

Как сделатьЯ отслеживаю процесс загрузки или загрузки? (AFNetworking faq)

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

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

...