1

計算中の進行状況を表示するビューコントローラがあります。メソッド呼び出しを入れます

viewDidLoadしかし問題は、計算が行われた後にのみビューが表示されることです!どのように

ビューが画面に表示された後、計算を自動的に起動できますか?

4

3 に答える 3

5

GCDを使用できます。これがRaywenderlichのチュートリアルです

- (void)viewDidAppear:(BOOL)animated
{
    [super viewDidAppear:animated];

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_LOW, 0), ^{
        //Calculations
        dispatch_async(dispatch_get_main_queue(), ^{
            //Update UI must be here
        });
    });
}
于 2013-03-22T18:41:21.270 に答える
2

viewDidLoad:ビューがロードされたときにトリガーされます。これは、ビューが表示されるときとは異なります。

代わりに、- (void)viewDidAppear:(BOOL)animatedコールバックメソッドで 計算を開始してみてください。UIViewController


これらの計算に時間がかかる場合は、バックグラウンドスレッドで実行することを検討してください。これにより、計算の実行中にUIがロックされるのを防ぐことができます。これには、ビューを表示できるだけでなく、ユーザーが待機している間に操作できるという利点があります。

[self performSelectorInBackground:@selector(doCalc)
                       withObject:nil];

そのdoCalcメソッドから、結果を使用してメインスレッドにコールバックします。

[self performSelectorOnMainThread:@selector(didCalcValue:)
                       withObject:result
                    waitUntilDone:NO];
于 2013-03-22T18:36:58.897 に答える
2

他の人が正しく指摘しているviewDidAppearように、ビューが画面に表示されたときに知らせてください。super*また、これらのイベントメソッドを使用するときは、呼び出すことを忘れないでください。

例:

// Tells the view controller that its view was added to the view hierarchy.

- (void)viewDidAppear:(BOOL)animated
{
  // makes sure it's also called on the superclass
  // because your superclass may have it's own code
  // needing to be called here
  [super viewDidAppear:animated];

  // do your calculations here

}

一般的に使用されるUIViewControllerイベント:

– (void)viewDidLoad

ビューが最初にメモリにロードされたときに呼び出されます。

– (void)viewDidAppear:

ビューが画面に表示された後に呼び出されます。

– (void)viewWillDisappear:

ビューが画面から消える前に呼び出されます。

UIViewControllerクラスリファレンスページの完全なリストを参照してください。

于 2013-03-22T19:04:24.190 に答える