Warten Sie, bis alle iOS-Blöcke ausgeführt wurden, bevor Sie fortfahren

Ich habe ein Datenmodell / Speicherobjekt, das über mehrere APIs, die Daten enthalten, mit dem Internet verbunden ist. Die Anzahl der APIs, mit denen eine Schnittstelle hergestellt werden soll, ist dynamisch: Aus konzeptioneller Sicht können wir die Endpunkte als Zeichenfolgen in einem NSMutableArray betrachten. Das Problem ist, dass ich Ansichten / andere Beobachter über aktualisierte Daten nach dem benachrichtigen möchtezuletzt Endpunkt- / API-Aufruf ist abgeschlossen. Ich habe versucht, GCD zu versenden, aber das folgende Muster scheint nicht richtig zu funktionieren:

dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_group_t group = dispatch_group_create();

dispatch_group_async(group, queue, ^{

    for(MyAPIEndpoint __weak __block *ep in apiList)
    {

       [self runAPI:ep withCompletionBlock:^(MyAPIEndpoint *api, NSError *err)
       {
           // update the data model here, code omitted as it's not relevant
       }
       ];
    }
});

dispatch_group_wait(group, DISPATCH_TIME_FOREVER);

// this statement must only execute AFTER the last block in the for loop above is done
[[NSNotificationCenter defaultCenter] postNotificationName:@"apiDataUpdated" object:self];

Es scheint jedoch nicht zu funktionieren; es scheint, dass der Code in diesem [self runAPI ...] Aufruf überhaupt nicht ausgeführt wird?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage