Tag: 过度

等待多个块完成

我有这些方法来从互联网上检索一些对象信息: – (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运行每个调用,并将这些NSOperations添加到NSOperationQueue然后依次执行“完成操作”,这取决于上述每个操作。 这是行不通的。 由于这些操作甚至在它们各自的成功/失败块返回之前被认为已经完成。 我也知道,我可以把每一个这样的电话都放在一个分类的NSOperation中,我可以自己决定何时开始完成。 但是,这听起来像是一种矫枉过正,还是唯一的出路呢? 这就是我所做的: NSOperation *completionOperation = [NSOperation new]; completionOperation.completionBlock = sucess; // Defined somewhere else NSOperationQueue *queue = [NSOperationQueue new]; for(ANAppliance *appliance in _mutAppliances) […]