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

}

データベースを初期化したら、コンテナー ビューに移動する必要があります。初期化中は進行状況バーが 1 つ表示されます。バックグラウンドプロセス全体が完了すると(アプリは最小化された状態になります)、それは正常に機能しています。バックグラウンドプロセス中にフォアグラウンドに来るとプログレスバーが表示されず、プログレスビューの代わりに黒い画面が表示されます。メインの脅威コンテナ ビューの完了後、[メイン スレッド プロセスのフォアグラウンドになった場合] はすべて表示されません。

ここに画像の説明を入力

メイン スレッド プロセスの途中でアプリに戻った場合は、プログレス バーを表示する必要があります。この問題を解決する方法を教えてください。

ありがとう。

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 に答える