У меня есть эти методы для получения некоторой информации об объекте из Интернета:
- (void)downloadAppInfo:(void(^)())success
failure:(void(^)(NSError *error))failure;
- (void)getAvailableHosts:(void(^)())success
failure:(void(^)(NSError *error))failure;
- (void)getAvailableServices:(void(^)())success
failure:(void(^)(NSError *error))failure;
- (void)getAvailableActions:(void(^)())success
failure:(void(^)(NSError *error))failure;
Загруженный материал сохраняется в свойствах объекта, поэтому функции успеха ничего не возвращают.
Теперь я хочу иметь один метод, подобный этому:
- (void)syncEverything:(void(^)())success
failure:(void(^)(NSError *error))failure;
Который не делает ничего, кроме вызова всех методов выше и возврата только после того, как каждый метод выполнил свой блок успеха или сбоя.
Как я могу это сделать?
Подсказка: я знаю, что каскадные вызовы методов в каждом успешном блоке будут работать. Но это не "чисто" и не полезно, когда более поздние реализации включают дополнительные методы.
Попытки:
Я попытался NSOperation
каждый из вызовов в NSOperation
и добавить эти NSOperations
в NSOperationQueue
а затем "операцию завершения", которая зависит от каждой из предыдущих операций.
Это не сработает. Поскольку операции считаются завершенными еще до того, как возвращаются их блоки успеха/неудачи.
Я также пытался использовать dispatch_group
. Но мне не ясно, правильно ли я это делаю. К сожалению, это не работает.