ビューへの変更が画面に反映されない
なにか処理をしているときに処理中の表示を出さなければならなくなった*1。
void Test() { progressView.Hidden = false; //重い処理 progressView.Hidden = true; }
この時、progressViewは画面上に一切表示されることなく処理が終わってしまう。
ググるとUI描画のスレッドに制御が渡らないのが原因らしい。
対処としてはNSRunLoopに一時的に制御を渡せばよいので
void Test() { progressView.Hidden = false; NSRunLoop.Main.RunUntil(NSDate.FromTimeIntervalSinceNow(0d)); //重い処理 progressView.Hidden = true; }
としたら意図してくれた通りに表示された。
とりあえずこの対応で今のところ問題は起きていない。
*1:本来ならスレッドを使うべきなのだろうが諸般の事情によりスレッドが使えない