Установите прогресс в UIProgressView при загрузке с помощью NSURLConnection

Я пытаюсь обновить индикатор выполнения в UIProgressView для запроса на загрузку с помощью NSURLConnection . Цель состоит в том, чтобы обновить индикатор выполнения при загрузке изображения. После нескольких поисков мне удалось использовать didSendBodyData моего делегата соединения, чтобы проверить прогресс следующим образом:

 - (void)connection:(NSURLConnection *)connection didSendBodyData:(NSInteger)bytesWritten totalBytesWritten:(NSInteger)totalBytesWritten totalBytesExpectedToWrite:(NSInteger)totalBytesExpectedToWrite { if([self.delegate respondsToSelector:@selector(progressView)]) { self.delegate.progressView.progress = (totalBytesWritten / totalBytesExpectedToWrite) * 100.0; } } 

Все работает нормально, но проблема в том, что этот метод вызывается только один раз … Таким образом, бар остается на 0% на мгновение, а затем мгновенно переходит на 100% без промежуточного. Я попробовал (с помощью iOS6 develloper tool на iPhone) установить мое соединение с медленным подключением к грани, если это просто моя загрузка, которая слишком быстра, но нет, загрузка займет некоторое время на 0, а затем перейдите на 100% мгновенно и метод вызывается только один раз …

Любая идея, пожалуйста? Спасибо ! Я не могу понять, как это исправить …

One Solution collect form web for “Установите прогресс в UIProgressView при загрузке с помощью NSURLConnection”

Вы действительно должны прочитать C-учебник по числовым типам. Предположительно, как totalBytesWritten и totalBytesExpectedToWrite представляют собой целочисленный тип, поэтому их разделение приведет к усечению – то есть дробная часть результата исчезнет. Если результат не равен 100%, интегральная часть всегда равна 0, поэтому все эти деления приведут к нулю. Попробуйте сделать одну или обе переменные float или double чтобы получить разумные результаты.

Кроме того, UIProgressView не принимает значения от 0 до 100 по умолчанию, но между 0 и 1. В целом вы должны написать

 self.delegate.progressView.progress = ((float)totalBytesWritten / totalBytesExpectedToWrite); 

и он должен работать нормально.

Изменить: проблема заключалась в том, что данные, которые вы пытались загрузить, были слишком маленькими, и их не нужно было разбивать на более мелкие куски, поэтому нужно было вызвать этот метод только один раз. Если вы поставляете большое количество данных, то их можно будет отправлять только отдельными частями, поэтому обратный вызов обработчика прогресса будет вызываться несколько раз.

  • Использование NSURLConnection с действительным сертификатом SSL в Swift
  • iphone: secure restfull server "Сертификат для этого сервера недействителен
  • Async NSURLConnection и поддерживать жизнь
  • Внедрение протокола NSURLConnectionDataDelegate
  • iOS: HTTP Basic / Digest Auth с UIWebView
  • Может ли NSURLConnection использовать сертификат клиента, установленный в профилях на устройстве?
  • Почему NSURLConnection не удалось выполнить с доменом Error Domain = NSURLErrorDomain Code = -1005 «Сетевое соединение было потеряно» в Swift iOS8?
  • Выполнение iOS4 - ?
  • Interesting Posts

    Управление интервалом вокруг пользовательских текстовых атрибутов в NSLayoutManager

    Почему интерфейс-конструктор не может использовать конкретный общий подкласс UIView?

    Кодирование видео в ios

    Проблема с категоризацией черного цвета при переключении налево

    Как я могу использовать boost :: test с xcode 4 для тестирования кода ios c ++?

    Несколько аннотаций от plist

    Команда /Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang не выполнена с кодом выхода 1

    Внедрение UIView поверх NSView для переноса с iOS на Mac OSX

    Xcode 8.3.2 Ошибка Clang

    Синхронный Vs асинхронный на iPhone

    Xcode больше не показывает мне устаревшие предупреждения

    UISearchDisplayController – метод для нажатия кнопки отмены

    Ярлык в пользовательской ячейке равен NULL при заполнении UITableViewController

    iOS 10.1 (полная версия) несовместима с последней версией Xcode

    Воспроизведение таблиц Но не показано, если я не щелкнув нигде в ViewController в swift 2.0?

    PhoneC: Разработка iOS проста с помощью XCode, Swift3, UITableView, cocatouch, давайте создадим приложения для iPhone, iPad и Macbook.