2012-12-12 75 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 
              } 
              ); 
         });