Как сделать индикатор выполнения для NSURLConnection при загрузке файла?

Я хочу разоблачить индикатор выполнения, в то время как загрузка с NSURLConnection происходит. Поскольку я получаю данные из сервера, я мог обновить UI для каждого полученного пакета. Но проблема: Как я выясняю, сколько данных я уже имею, и сколько данных должно быть загружено? Вероятно, в байтах... И затем я должен сделать некоторую математику для получения процента?

24
задан dontWatchMyProfile 15 February 2010 в 18:08
поделиться

1 ответ

В делегате NSURLConnection реализуйте что-то вроде этого, чтобы узнать общую длину содержимого. Сервер должен поддерживать это, но, скорее всего, он будет нормально работать со статическим содержимым:

- (void)connection: (NSURLConnection*) connection didReceiveResponse: (NSHTTPURLResponse*) response
{
    statusCode_ = [response statusCode];
    if (statusCode_ == 200) {
        download_.size = [response expectedContentLength];
    }
}

А затем процесс обновления будет выглядеть следующим образом:

- (void) connection: (NSURLConnection*) connection didReceiveData: (NSData*) data
{
    [data_ appendData: data];
    download_.progress = ((float) [data_ length] / (float) download_.size);
    // Broadcast a notification with the progress change, or call a delegate
}

В моем случае у меня есть экземпляр загрузки с размером и прогресс свойства. Они принадлежат глобальному объекту DownloadManager , который позаботится об уведомлении заинтересованных сторон о ходе загрузки или изменениях состояния.

63
ответ дан 28 November 2019 в 22:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: