0

私はモーダルのVCを提示しようとしています。しかし、ユーザーが画面上に何かを見るまでボタンをタップしようとすると、遅延が5秒程度かかることがあります。PresentModalViewControllerはモーダルを表示するのに5秒かかります

マイモーダルビューには3ページあり、各ページにはサブビューとして6つのテーブルがあります。私はネットワーク接続を使用していません。すべてのテーブルはローカルxmlデータからロードされます。

私の質問は です。1)ロードされたモーダルVCのパフォーマンスを向上させる方法はありますか? 2)アクティビティインジケータを表示し、バックグラウンドスレッドでビューをロードさせ、ロードが完了したらインジケータを削除できますか?

私はのviewDidLoad performSelectorInBackground方法を使用してバックグラウンドスレッド内のすべてのページの初期化コードのアクティビティインジケータを開始したオプション2を試してみました。しかし、これは私のテーブルを奇妙に見えるようにしています、そこにフレームはすべてゆがんでいます、そこに幅がねじ込まれています。任意の提案は本当にたくさんの助けになります。

答えて

0

viewDidAppearでアクティビティインジケータを表示し、バックグラウンドスレッドでデータをフェッチでき、ビュー/テーブルビューを更新するだけで済みます。このようにして、モーダルビューは提示されると5秒も遅れることもありません。

+0

これはこれまでどおりウォッチで私を助けません。答える前に問題を再確認してください。私の遅れはデータフェッチのcozではなく、すべてのデータはローカルXMLにあります。それは私が各ページに持っているサブビューの数のcozです。 – Mobilewits

2

バックグラウンドスレッドのインターフェイス要素を表示または変更しないでください。あなたがバックグラウンドスレッドにいるあなたは、メインスレッドで何かをしたい場合は、セレクタを使用することができ、次のいずれか

[self performSelectorOnMainThread:@selector(doSomething:) 
         withObject:someObject 
        waitUntilDone:NO]; 

か、GCD(私のお気に入り)を使用することができます:

dispatch_async(dispatch_get_main_queue(), ^{ 
    [self doSomething:someObject]; 
}); 

をどのメソッドを使用していても、バックグラウンドスレッドでデータをロードし、そのバックグラウンドスレッドからビューをロードしようとすると、必ずメインスレッドでその呼び出しを行います。そうしないと、 。

+0

フィードバックありがとうございます。これは私のための1つのパズルを解決します。しかし、私は私のメインスレッドで実行する場合は、負荷が再び延期され、私はアクティビティインジケータを表示することはできません。 – Mobilewits

+0

@jacob:メインスレッドで何かを実行しても、バックグラウンドスレッドは停止しません。あなたがする必要があるのは、バックグラウンドスレッドでxml解析を実行してから、メインスレッドでモーダルビューを起動するコールバックがあるときです。 –

+0

ローカルxmlファイルからデータをロードするときに、データをロードするのが遅延ではありません。それは、私が生成し、viewDidLoadに追加するサブビューの数の大部分です。 – Mobilewits

関連する問題