2010-02-15 4 views
24

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

ответ

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, который будет заботиться об уведомлении заинтересованных сторон о ходе загрузки или изменениях состояния.