Cómo dispatch_group_wait para dispatch_group_async dentro de un bloque asíncrono

Tengo un código que se parece a esto:

[SVProgressHUD show]; [imageGenerator generateCGImagesAsynchronouslyForTimes:times completionHandler:^(CMTime requestedTime, ...) { dispatch_group_async(queueGroup, queue, ^{ // Do stuff }); }]; dispatch_group_wait(queueGroup, DISPATCH_TIME_FOREVER); [SVProgressHUD dismiss]; 

Básicamente, muestra una animation de carga HUD y comienza a generar imágenes en miniatura de un recurso, luego, una vez que se hace, oculta el HUD. Estoy usando un grupo de envío, ya que quiero asegurarme de que se generen todas las miniaturas antes de ocultar el HUD.

Pero cuando lo ejecuto, el HUD es despedido de inmediato. Supongo que esto se debe a la naturaleza asíncrona de generateCGImagesAsynchronouslyForTimes: completionHandler:dispatch_group_wait se invoca antes de la primera dispatch_group_async dentro de completionHandler.

¿Qué es una forma elegante de sortear esta situación? Gracias.

Piense en este método como un contador estático disponible para subprocesss, de modo que cuando ingresa en un grupo, el contador aumenta, y cuando ese bloque retorna, disminuye …

Cuando ese contador es 0, llamará a un bloque para invocar

 dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); dispatch_group_t group = dispatch_group_create(); while(someCondition) { dispatch_group_enter(group); [SomeClassThatLoadsOffTheInternet getMyImages:^{ // do something with these. dispatch_group_leave(group); }); } dispatch_group_notify(group, queue, ^{ // do something when all images have loaded }); 

¿Eso es lo que estabas pensando?