que han estado tratando de encontrar una solución para eso y han leído un montón de foros, pero no he tenido lo que quería. Después de entender cómo funciona el indicador de actividad y el controlador de vista de tabla, se me ocurrió la siguiente solución.
Por alguna razón, si intenta iniciar el indicador de actividad en el mismo subproceso con la carga de tabla o cualquier otro proceso costoso, el indicador de actividad nunca se ejecuta. Si intenta ejecutar la carga de tabla o alguna otra operación en otro subproceso, entonces podría no ser seguro y podría producir errores o resultados no deseados. Entonces podemos ejecutar el método que presenta el indicador de actividad en otro hilo.
También he combinado esta solución con MBProgressHUD para presentar algo que se vea mejor que una vista con un indicador de actividad. En cualquier caso, las miradas de activityView se pueden personalizar.
-(void)showActivityViewer
{
AppDelegate *delegate = [[UIApplication sharedApplication] delegate];
UIWindow *window = delegate.window;
activityView = [[UIView alloc] initWithFrame: CGRectMake(0, 0, window.bounds.size.width, window.bounds.size.height)];
activityView.backgroundColor = [UIColor blackColor];
activityView.alpha = 0.5;
UIActivityIndicatorView *activityWheel = [[UIActivityIndicatorView alloc] initWithFrame: CGRectMake(window.bounds.size.width/2 - 12, window.bounds.size.height/2 - 12, 24, 24)];
activityWheel.activityIndicatorViewStyle = UIActivityIndicatorViewStyleWhite;
activityWheel.autoresizingMask = (UIViewAutoresizingFlexibleLeftMargin |
UIViewAutoresizingFlexibleRightMargin |
UIViewAutoresizingFlexibleTopMargin |
UIViewAutoresizingFlexibleBottomMargin);
[activityView addSubview:activityWheel];
[window addSubview: activityView];
[[[activityView subviews] objectAtIndex:0] startAnimating];
}
-(void)hideActivityViewer
{
[[[activityView subviews] objectAtIndex:0] stopAnimating];
[activityView removeFromSuperview];
activityView = nil;
}
- (IBAction)reloadDataAction:(id)sender {
[NSThread detachNewThreadSelector:@selector(showActivityViewer) toTarget:self withObject:nil];
//... do your reload or expensive operations
[self hideActivityViewer];
}
También interesado en esta pregunta.Pero hasta donde sé, las subclases de UIView no son seguras para subprocesos. –