2012-02-19 19 views
3

私のビューコントローラがかなり長い時間ロードされているときに何をすべきかアドバイスが必要ですか?ベストプラクティス:View Controllerの読み込みに時間がかかる場合はどうすればよいですか?

私の状況では、route-meで作成したオフラインマップがあり、約100MBのデータベースからマップをロードしてから、多くのマーカーをロードして地図に貼り付けるのに数秒かかります。 viewDidLoad UIのこのコードは、タブやボタンを押した後、すべてがロードされている間何も起こらないので、応答しないようです。私がviewDidAppearマップに配置すると、何とかこのView Controllerを終了してそのビューに戻るまで、何も表示されません。

答えて

5

時間がかかる場合は、のデータをバックグラウンドスレッドにロードしている間に、スピナーやその他の「ビジー」インジケータを表示する必要があります

時間のかかる処理が完了したら、メインスレッドのUIを元に戻し、スピナー/ビジーインジケーターを非表示にします。バックグラウンドスレッド上のコードを実行

は非常に簡単です - そこにそれを行うには、いくつかの方法があります - しかし、最も簡単な/最もストレートフォワードな方法は、この例のようperformSelectorInBackground:withObject:で、おそらくです:

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

ます」再びメインスレッド上で実行する準備ができて再 - それは同じことだが、逆にperformSelectorOnMainThread:withObject:waitUntilDone:を使用して:

[self performSelectorOnMainThread:@selector(wrapupLoadMap) withObject:nil waitUntilDone:NO]; 

幸運。

関連する問題