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

}

初始化数据库后,我需要导航到容器视图。在初始化期间,我将显示一个进度条。当整个后台进程完成时(应用程序处于最小化状态),这一切正常。在后台过程中,如果我来到前台进度条当时没有显示黑屏而不是进度视图。主威胁容器视图完成后所有不显示[如果我来到主线程进程的前台]。

在此处输入图像描述

如果我在主线程进程的中间返回应用程序,我需要显示进度条。请指导我解决此问题。

谢谢。

4

1 回答 1

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
                                           }
                                           );
                        });
于 2012-12-12T12:50:25.570 回答