2013-02-21 12 views
0

을 시작 완료 될 때까지 아이폰 OS는 기다려야하지 확인 :전체 방법을 나는 방법을 <code>refreshDataAction</code>이 애니메이션

- (void)refreshDataAction 
{ 
    MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES]; 
    hud.labelText = @"Loading Data.Please Wait"; 
    [self deletePreviousValues]; 
    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{ 
     NSLog(@"Getting customer values"); 
     [self getAllCustomerValues]; 
     NSLog(@"Got customer values"); 

     NSError *nwerror = nil; 
     if (![self.secondMOC save:&nwerror]) 
     { 
      NSLog(@"209 Failed to save second MOC"); 
     } 
     else 
     { 
      //NSLog(@"saved success"); 
     } 
     dispatch_async(dispatch_get_main_queue(), ^{ 
      [MBProgressHUD hideHUDForView:self.view animated:YES]; 
     }); 
     NSLog(@"Saved"); 
    }); 

    NSLog(@"Dispatched"); 
} 

을 이렇게 빨리 내가 ​​HUD를 참조해야 refreshDataAction 시작한다. 그러나 HUD를 보여주기 전에 13 초를 기다리는 것과 마찬가지입니다. 나는 왜 그런 일이 일어나고 있는지 전혀 모른다. 나는 ActivityIndicator와 같은 다른 것을 시도했지만, 아무 소용이 없다. 왜 내 앱은 허드를 시작하기 위해 13 초를 기다린다. 시뮬레이터에서 그 순간. 나는 버튼을 클릭하고 나는 HUD를 본다. 하지만 장치 13 초 지연. 배경 스레드가 작업을 수행하는 동안 즉시 hud를 시작하십시오. 도와주세요. 이 작업을 수행하는 방법을 알아내는 데 5 시간을 소비했습니다.

여기 내 질문이있다 : 나는 MBProgressHUD로 변경 UIAlertview hanging while the thread in background is loading data

가. MBProgressHUD으로 작업 한 일부 개발자가이 문제를 볼 수 있습니다.

내 메인 UI 스레드가 13 초 동안 어떤 종류의 절전 모드에 있습니까? 나는이 시점에서 정말로 모른다. 참고로, iOS 6.0에 있습니다. 이것은 사내 iPad 응용 프로그램입니다. 더 많은 정보가 필요하다면, 묻습니다. 감사합니다.

+0

당신이 당신의 이전 질문의 중복을 만드는 이유는 무엇? 당신이 한 모든 것은 경고 화면을'MBProgressHUD'로 대체합니다. 문제의 원인도 마찬가지입니다. – rmaddy

+0

[배경의 스레드가 데이터를로드하는 동안 매달려있는 UIAlertview의 복제본] (http://stackoverflow.com/questions/15010458/uialertview-hanging-while-the-thread-in-background-is-loading-data) – rmaddy

답변

0

다음을 viewDidLoad에 추가합니다.

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

이 그럼 당신은 단순히 dispatch_get_main_queue없이 다음과 같은 방법을 호출 할 수 있습니다().

[HUD show:YES]; 

및 ...

[HUD hide:YES];