計算中の進行状況を表示するビューコントローラがあります。メソッド呼び出しを入れます
でviewDidLoad
しかし問題は、計算が行われた後にのみビューが表示されることです!どのように
ビューが画面に表示された後、計算を自動的に起動できますか?
計算中の進行状況を表示するビューコントローラがあります。メソッド呼び出しを入れます
でviewDidLoad
しかし問題は、計算が行われた後にのみビューが表示されることです!どのように
ビューが画面に表示された後、計算を自動的に起動できますか?
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
});
});
}
viewDidLoad:
ビューがロードされたときにトリガーされます。これは、ビューが表示されるときとは異なります。
代わりに、- (void)viewDidAppear:(BOOL)animated
コールバックメソッドで 計算を開始してみてください。UIViewController
これらの計算に時間がかかる場合は、バックグラウンドスレッドで実行することを検討してください。これにより、計算の実行中にUIがロックされるのを防ぐことができます。これには、ビューを表示できるだけでなく、ユーザーが待機している間に操作できるという利点があります。
[self performSelectorInBackground:@selector(doCalc)
withObject:nil];
そのdoCalc
メソッドから、結果を使用してメインスレッドにコールバックします。
[self performSelectorOnMainThread:@selector(didCalcValue:)
withObject:result
waitUntilDone:NO];
他の人が正しく指摘している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クラスリファレンスページの完全なリストを参照してください。