2012-12-12 106 views
1

在我的應用程序中,我使用回地線程來打多個服務並使用核心數據執行操作。我已經使用主線程進行背景處理,它的工作正常。 這裏是我的代碼主線程處理問題

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]; 
     } 

} 

一旦我初始化數據的基礎上,我需要導航到容器view.During初始化我會顯示一個進度條。這是工作正常,當整個後臺進程完成(應用程序處於最小化狀態)。在後臺進程中,如果我來到前臺,進度條不顯示,那時黑屏顯示而不是進度視圖。主威脅容器視圖完成後全部不顯示[如果我來到主線程進程的前臺]。

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 
              } 
              ); 
         });