Я хочу показать индикатор выполнения, когда происходит загрузка с NSURLConnection. Когда я получаю данные с сервера, я могу обновить интерфейс для каждого полученного пакета. Но проблема заключается в следующем: как я могу определить, сколько данных у меня уже есть, и сколько данных нужно загружать? Вероятно, в байтах ... А потом мне нужно сделать некоторую математику, чтобы получить процент?Как сделать индикатор выполнения NSURLConnection при загрузке файла?
24
A
ответ
63
В вашем делегате 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
, который будет заботиться об уведомлении заинтересованных сторон о ходе загрузки или изменениях состояния.