2016-09-09 2 views
2

Alamofire 요청을 통해 많은 파일을로드하고 있습니다. 로드하는 동안 "로딩 ..."회 전자 (MBProgressHUD)를 표시하려고합니다.계속하기 전에 여러 개의 Alamofire 요청이 완료 될 때까지 기다리시겠습니까?

하지만 모든 요청이 완료되면 정확한 시간에 HUD를 숨길 수있는 문제가 있습니다.

지금까지 시도한 모든 것이 허드가 너무 일찍 숨겨 지거나 결코 전혀 숨겨지지 않았습니다. 현재 NSDperation 서브 클래스에 래핑 된 요청을 NSBlockOperation과 함께 사용하여 모든 Alamofire 요청 작업을 종속 항목으로 숨기고 있습니다. 그러나 요청을 적시에 완료로 표시하는 방법을 알아낼 수는 없습니다.

이상적으로는 이보다 더 간단한 해결책을 찾고 싶습니다. 이것을 달성하는 가장 좋은 방법은 무엇입니까? 감사.

답변

2

사용 disptach_group_t 여기

dispatch_group_t group = dispatch_group_create(); 

__weak MainViewControllerSupplier * weakSelf = self; 
dispatch_group_enter(group); 
[self showHUD]; 
[[DataManager sharedManager] getCategoriesWithSuccessBlock:^(NSArray *categories) { 
    weakSelf.arrCategories = categories; 
    dispatch_group_leave(group); 

    // NSLog(@"response category= %@",categories); 
} failureBlock:^(NSError *error) { 
    NSLog(@"response category = %@",error); 
    dispatch_group_leave(group); 
}]; 

dispatch_group_enter(group); 
[[DataManager sharedManager] getRegionsWithSuccessBlock:^(NSArray *regions) { 
    weakSelf.arrRegions = regions; 
    dispatch_group_leave(group); 
} failureBlock:^(id error) { 
    NSLog(@"response region = %@",error); 
    dispatch_group_leave(group); 

}]; 

dispatch_group_notify(group, dispatch_get_main_queue(), ^{ 
    dispatch_async(dispatch_get_main_queue(), ^{ 
     [self hideHUD]; 
    }); 
    // All task completed 

}); 
예이다

관련 문제