Подтвердить что ты не робот

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

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

4b9b3361

Ответ 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
}

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