¿Cuál es la forma correcta de mostrar un indicador de carga al get datos de una URL?

Soy algo nuevo en objective-c, estoy desarrollando una aplicación de iOS de noticias, la aplicación obtiene todos sus contenidos usando el análisis JSON de una url, estoy usando AFNetworking para eso y este es el método que hice:

 - (void)getContents { NSString *urlString = @"http://some-url-that-has-json-output/"; urlString = [urlString stringByAppendingString:self.articleId]; NSLog(@"The call url is: %@",urlString); NSURL *url = [NSURL URLWithString:urlString]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; //AFNetworking asynchronous url request AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"The JSON data is: %@", responseObject); jsonContents = [responseObject objectForKey:@"article"]; [self LoadStructure]; } failure:nil]; [operation start]; } 

Ahora los datos se cargan bien con este método.

Mi pregunta: ¿Cómo mostrar un indicador de carga (podría ser un GIF) al get los datos? y es este método anterior ¿es la mejor manera de get los datos de una url?

Puede usar el indicador de carga pnetworkingeterminado de iOS (UIActivityIndicator). Debería comenzar a animarlo antes del bloque de finalización y debe ocultarse dentro del bloque de éxito y falla.

Debería crear un método utilizando el indicador como variable de class:

 indicator = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge]; indicator.hidesWhenStopped = YES; indicator.frame = CGRectMake(35, 15, 30, 30); [self.view addSubview:indicator]; NSURLRequest *request = [NSURLRequest requestWithURL:url]; //AFNetworking asynchronous url request AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; operation.responseSerializer = [AFJSONResponseSerializer serializer]; [indicator startAnimating]; [operation setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"The JSON data is: %@", responseObject); 

// para detener:

 [indicator stopAnimating]; jsonContents = [responseObject objectForKey:@"article"]; [self LoadStructure]; } failure::^(AFHTTPRequestOperation *operation, NSError *error){ [indicator stopAnimating]; }]; [operation start]; 

Arrastre y suelte UIActivityIndicatorView en su vista XIB y conéctelo con IBOutlet.

file .h

 @property(nonatomic, strong)IBOutlet UIActivityIndicatorView * activityIndicator; 

Agregue la vista del indicador UIActivity en su vista. muéstralo antes

NSString *urlString = @"http://some-url-that-has-json-output/";

usando: [self.activityIndicator startAnimating];

y detenerlo dentro del bloque de finalización y bloque de falla

usando: [self.activityIndicator stopAnimating];