Establezca la barra de progreso para download NSData

NSURL *url = [NSURL URLWithString:@"http://i0.kym-cdn.com/entries/icons/original/000/005/545/OpoQQ.jpg?1302279173"]; NSData *data = [NSData dataWithContentsOfURL:url]; imageView.image = [[[UIImage imageWithData:data]; 

Quiero establecer la barra de progreso durante la descarga.

Para dar un ejemplo más detallado:

en tu file .h

 @interface YourClass : YourSuperclass<NSURLConnectionDataDelegate> 

en su file .m

 @property (nonatomic) NSMutableData *imageData; @property (nonatomic) NSUInteger totalBytes; @property (nonatomic) NSUInteger receivedBytes; 

Y en alguna parte llaman

 NSURL *url = [NSURL URLWithString:@"http://i0.kym-cdn.com/entries/icons/original/000/005/545/OpoQQ.jpg?1302279173"]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; NSURLConnection *connection = [[NSURLConnection alloc] initWithRequest:request delegate:self startImmediately:YES]; 

Y también implementa los methods de delegado

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response { NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) urlResponse; NSDictionary *dict = httpResponse.allHeaderFields; NSString *lengthString = [dict valueForKey:@"Content-Length"]; NSNumberFormatter *formatter = [[NSNumberFormatter alloc] init]; NSNumber *length = [formatter numberFromString:lengthString]; self.totalBytes = length.unsignedIntegerValue; self.imageData = [[NSMutableData alloc] initWithCapacity:self.totalBytes]; } - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data { [self.imageData appendData:data]; self.receivedBytes += data.length; // Actual progress is self.receivedBytes / self.totalBytes } - (void)connectionDidFinishLoading:(NSURLConnection *)connection { imageView.image = [UIImage imageWithData:self.imageData]; } - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error { //handle error } 

No puede get retrocesos de llamada mediante el uso de ese método.

NSURLConnection usar una NSURLConnection y NSURLConnectionDataDelegate .

La NSURLConnection se ejecuta de forma asíncrona y enviará devoluciones de llamada a su delegado.

Los principales a mirar son …

 - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response; - (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error; - (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data; 

y

 - (void)connectionDidFinishLoading:(NSURLConnection *)connection; 

Todos estos se utilizan para get la connection para hacer lo que ya estás haciendo.

EDITAR

De hecho, mira la respuesta de Marc a continuación. Es correcto.

Puede usar la class MBProgress Hud para cargar la vista. Puede download solo dos classs de aquí: – https://github.com/jdg/MBProgressHUD Después de escribir este código en esa class en la que desea cargar los datos. Ejemplo: En su vista, LoadLoad escribe esto

 - (void) viewDidLoad { MBProgressHud *spinner = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; spinner.mode = MBProgressHUDModeCustomView; [spinner setLabelText:@"Loading....."]; [spinner setLabelFont:[UIFont systemFontOfSize:15]]; [spinner show:YES]; [self performSelectorInBackground:@selector(getData) withObject:nil]; } - (void) getData { NSURL *url = [NSURL URLWithString:@"http://i0.kym-cdn.com/entries/icons/original/000/005/545/OpoQQ.jpg?1302279173"]; NSData *data = [NSData dataWithContentsOfURL:url]; imageView.image = [[[UIImage imageWithData:data]; [spinner hide:YES]; [spinner removeFromSuperViewOnHide]; }