Подождите, пока все блоки iOS будут выполнены, прежде чем двигаться дальше
У меня есть объект модели данных / хранилища, который взаимодействует с Интернетом через несколько API, содержащих данные. Число API-интерфейсов, с которыми необходимо взаимодействовать, является динамическим: с концептуальной точки зрения мы можем рассматривать конечные точки как строки в NSMutableArray. Проблема в том, что я хочу уведомить мнения / других наблюдателей об обновленных данных послепрошлой вызов конечной точки / API завершен. Я попробовал диспетчеризацию GCD, но следующая схема не работает должным образом:
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];
Тем не менее, это не похоже на работу; кажется, что код внутри этого вызова [self runAPI ...] никогда не выполняется вообще?