Estoy tratando de integrar un objeto NSURLConnection con UIProgressView, por lo que puedo actualizar al usuario mientras se está descargando un archivo en segundo plano.¿Cómo integrar NSURLConnection con UIProgressView?
Creé un objeto por separado para descargar el archivo en segundo plano, y estoy teniendo problemas para averiguar cómo actualizar la propiedad de progreso en el objeto UIProgressView con el valor correcto. Probablemente sea algo muy simple, pero no puedo resolverlo con Google.
Aquí está el código que tengo:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response {
[self.resourceData setLength:0];
self.filesize = [NSNumber numberWithLongLong:[response expectedContentLength]];
NSLog(@"content-length: %d bytes", self.filesize);
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data {
[self.resourceData appendData:data];
NSNumber *resourceLength = [NSNumber numberWithUnsignedInteger:[self.resourceData length]];
NSLog(@"resourceData length: %d", [resourceLength intValue]);
NSLog(@"filesize: %d", self.filesize);
NSLog(@"float filesize: %f", [self.filesize floatValue]);
progressView.progress = [resourceLength floatValue]/[self.filesize floatValue];
NSLog(@"progress: %f", [resourceLength floatValue]/[self.filesize floatValue]);
}
Como se puede ver, la variable miembro resourceData mantiene los datos del archivo, ya que está siendo descargado. La variable de miembro del tamaño de archivo contiene el tamaño completo del archivo, tal como lo devuelve mi servicio web en su encabezado Content-Length.
Todo funciona bien, sigo obteniendo los datos descargados con múltiples ejecuciones de didReceiveData como debería, pero cuando trato de calcular el valor de progreso, no se devuelve el valor adecuado. Vea a continuación una pequeña muestra de lo que me pasa en mi registro de la consola:
content-length: 4687472 bytes
resourceData length: 2904616
filesize: 4687472
float filesize: -1.000000
progress: -2904616.000000
Como referencia, progressView.progress es un flotador. tamaño de archivo es un NSNumber que contiene una longitud larga. Finalmente, resourceLength es un NSNumber que contiene un NSUInteger.
¿Qué me falta aquí?
¿Qué se registra en la consola cuando ejecuta esto? ¿Están los campos de progreso correctamente impresos? –
Ben, acaba de agregar una muestra del registro de la consola. – jpm