2013-10-14 6 views
2

문제가 있습니다. 서버에서 데이터를 가져 오기 위해 AFNetworking을 사용했습니다. NSOperationQueue를 사용하여 많은 작업을 추가했습니다. 각 요청에서 대기열에이 작업을 추가하고 waitUntilAllOperationsAreFinished을 사용했습니다. 울부 짖는 소리 :iOS에 데이터로드 대기 중 MBProgressHUD 추가하는 방법

request 1 
... 
    [queue addOperation:operation1]; 
    [queue waitUntilAllOperationsAreFinished]; 

request 2 
... 
    [queue addOperation:operation2]; 
    [queue waitUntilAllOperationsAreFinished]; 

내가 위의 코드를 시도하고, 그 다음 나는 경우 큐 마무리를 확인하려면 내 프로그램이 중단을 보인다 그 후,이 큐 마무리를 대기에 내가 추가 MBProgressHUD에 원하는 ok.So 실행, 내가 원하는 MBProgressHUD를 숨 깁니다. 하지만 Button을 클릭하여 UIViewController를로드하면 MBProgressHUD가 표시되지 않습니다.

HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
[self.view addSubview:HUD]; 
HUD.delegate = self; 
HUD.labelText = @"Loading"; 

실제로 대기열이 완료되면 MBProgressHUD를 표시하려고합니다. 내가 어떻게 할 수 있니? 덕분에 모든

답변

12

곧 당신은 이런 식으로 작업을 수행 할 수 있습니다

[MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
[MBProgressHUD hideHUDForView:self.view animated:YES]; 

확인 MBProgressHUD의 당신이 정말로 원하는하지 않도록 아마 메인 스레드입니다 usage

+0

감사합니다, 나는 그것을 시도했지만 여전히 귀하의 제안에 대한 –

2

waitUntilAllOperationsAreFinished 의지 복 현재 스레드, 하기 위해서.

당신은 그래서 당신은 HUD이 메서드를 호출하고 completionBlock

+0

감사를 작동하지 –

3

또 다른 더 나은 접근 방법에 HUD를 숨기 보여 다음 AFHTTPClient

- (void)enqueueBatchOfHTTPRequestOperations:(NSArray *)operations 
           progressBlock:(void (^)(NSUInteger numberOfFinishedOperations, NSUInteger totalNumberOfOperations))progressBlock 
          completionBlock:(void (^)(NSArray *operations))completionBlock; 

에이 방법을 확인 AFNetworking를 사용하는 경우 ..

HUD = [[MBProgressHUD alloc] initWithView:self.view]; 
    HUD.labelText = @"Doing funky stuff..."; 
    HUD.detailsLabelText = @"Just relax"; 
    HUD.mode = MBProgressHUDModeAnnularDeterminate; 
    [self.view addSubview:HUD]; 

    [HUD showWhileExecuting:@selector(doSomeFunkyStuff) onTarget:self withObject:nil animated:YES]; 

및 doSomeFunkyStuff

- (void)doSomeFunkyStuff { 
    float progress = 0.0; 

    while (progress < 1.0) { 
     progress += 0.01; 
     HUD.progress = progress; 
     usleep(50000); 
    } 
} 

상세 answer is here..