Cómo agregar MBProgressHUD esperando cargar datos en iOS

Tengo un problema: utilicé AFNetworking para get datos del server, utilicé NSOperationQueue para agregar muchas operaciones, en cada request, agregué esta operación a la queue y utilicé waitUntilAllOperationsAreFinished como a continuación:

 request 1 ... [queue addOperation:operation1]; [queue waitUntilAllOperationsAreFinished]; request 2 ... [queue addOperation:operation2]; [queue waitUntilAllOperationsAreFinished]; 

Probé el código anterior y mis progtwigs parecen estar bloqueados y después de eso, funciona bien. Por lo tanto, quiero agregar MBProgressHUD a la queue en espera, entonces quiero comprobar si la queue finaliza, quiero ocultar MBProgressHUD. Pero cuando hago clic en el button para cargar UIViewController, MBProgressHUD no puede mostrarse.

 HUD = [[MBProgressHUD alloc] initWithView:self.view]; [self.view addSubview:HUD]; HUD.delegate = self; HUD.labelText = @"Loading"; 

En realidad, quiero mostrar MBProgressHUD cuando finaliza la queue. ¿Cómo puedo hacer eso? Gracias a todos

En breve puedes hacerlo así:

 [MBProgressHUD showHUDAddedTo:self.view animated:YES]; [MBProgressHUD hideHUDForView:self.view animated:YES]; 

Comtesting el uso de MBProgressHUD

Otro enfoque mejor …

  HUD = [[MBProgressHUD alloc] initWithView:self.view]; HUD.labelText = @"Doing funky stuff..."; HUD.detailsLabelText = @"Just relax"; HUD.mode = MBProgressHUDModeAnnularDeterminate; [self.view addSubview:HUD]; [HUD showWhileExecuting:@selector(doSomeFunkyStuff) onTarget:self withObject:nil animated:YES]; 

Y doSomeFunkyStuff

 - (void)doSomeFunkyStuff { float progress = 0.0; while (progress < 1.0) { progress += 0.01; HUD.progress = progress; usleep(50000); } } 

La respuesta detallada está aquí …

waitUntilAllOperationsAreFinished cargará el hilo actual, que probablemente sea el hilo principal, por lo que realmente no quieres hacer eso.

Si está utilizando AFNetworking, consulte este método en AFHTTPClient

 - (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock completionBlock:(void (^)(NSArray *operations))completionBlock; 

Entonces, muestre que HUD llama a este método y oculte su HUD en el bloque de completionBlock