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