2012-12-12 5 views
1

내 응용 프로그램에서 나는 여러 서비스를 치고 코어 데이터를 사용하여 작업을 수행하기 위해 백 그라운드 스레드를 사용하고 있습니다. 내가 다시 지상 프로세스에 대한 주요 스레드를 사용하여, 그 잘 작동합니다. 난, 데이터베이스를 초기화 내가 하나 개의 진행률 표시 줄을 표시합니다 내가 초기화를 view.During 컨테이너로 이동합니다 일단 여기에 내 코드메인 스레드 처리 문제

dispatch_queue_t main = dispatch_get_main_queue(); 
    dispatch_async(main, 
        ^{ 
         [self backGroundCall]; 
        }); 

-(void)backGroundCall 
{ 
    NSLog(@"Done"); 
     if([CacheManager refreshDBforFirstTimeUseWithDelegate:self]) 
     { 
      [[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"IsDBInitialized"]; 

      ContainerViewController *containerViewControllerInstance = [ContainerViewController getContainerInstance]; 
      [containerViewControllerInstance setUserId:_userID]; 

      [progressView setHidden:YES]; 
      [self.view setUserInteractionEnabled:YES]; 

      [self.navigationController setDelegate:containerViewControllerInstance]; 
      [self.navigationController pushViewController:containerViewControllerInstance animated:YES]; 
     } 

} 

입니다. 전체 백그라운드 프로세스가 완료되면 (앱이 최소화 된 상태로 유지되는 경우) 정상적으로 작동합니다. 백그라운드 프로세스 중에 포 그라운드 진행 막대가 나타나면 그 시점에 검은 화면이 표시되지 않고 진행보기 대신 표시됩니다. 주요 위협 컨테이너보기가 완료된 후에는 [주 스레드 프로세스의 전경에 오면] 표시되지 않습니다.

enter image description here

은 내가 메인 스레드 프로세스의 중간에 다시 응용 프로그램에 올 경우, 진행 표시 줄을 표시해야합니다. 이 문제를 해결하도록 안내해주세요.

감사합니다.

+1

백그라운드 스레드를 백그라운드 스레드로 처리하십시오. 주 스레드가 작동 중일 때 UI가 응답 할 수 없습니다. – trojanfoe

+0

제발 샘플 코드에 관한. 위의 코드에서 반환 한 progressView를 표시해야합니다. – Ganapathy

답변

4
dispatch_queue_t main = dispatch_get_main_queue(); 
    dispatch_async(main, 
        ^{ 
         [self backGroundCall]; 
        }); 

이 당신은 방법 backGroundCall 부르지 만 실제로 주 스레드에서이 일을하고 있습니다 ... 조금 잘못된 것입니다. 작업 스레드에서 작업을 수행하려면 다음을 수행하십시오.

// Declare the queue 
     dispatch_queue_t workingQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0); 
     dispatch_async(workingQueue, 
         ^{ 
          // My background job 
          dispatch_async(dispatch_get_main_queue(), 
              ^{ 
               // Update the UI 
              } 
              ); 
         });