2010-02-15 8 views
24

Quiero mostrar una barra de progreso mientras se está realizando una descarga con NSURLConnection. Como estoy recibiendo datos del servidor, podría actualizar la interfaz de usuario para cada paquete recibido. Pero el problema es: ¿cómo averiguo cuántos datos ya tengo y cuántos datos hay que descargar? Probablemente en bytes ... ¿Y luego tengo que hacer algunas matemáticas para obtener el porcentaje?¿Cómo hacer una barra de progreso para una NSURLConnection al descargar un archivo?

Respuesta

63

En su delegado NSURLConnection, implemente algo así para conocer la longitud total del contenido. El servidor tiene que apoyar esto, pero es muy probable que no tendrán ningún problema con el contenido estático:

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

y luego actualizar el progreso de esta manera:

- (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 
} 

En mi caso tengo una instancia de descarga que tiene size y progress propiedades. Son propiedad de un objeto global DownloadManager que se ocupará de notificar a las partes interesadas el progreso de la descarga o los cambios de estado.

Cuestiones relacionadas