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?