0

モーダル VC を提示しようとしています。ただし、ユーザーが画面に何かが表示されるまでボタンをタップしようとすると、5 秒ほどかかります。遅延はかなり大きいようです。

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

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

オプション 2 を試しました。viewDidLoadでアクティビティ インジケーターを開始し、 すべてのページ初期化コードをバックグラウンド スレッドで performSelectorInBackgroundメソッドを使用して開始しました。しかし、これにより、テーブルが奇妙に見えるようになっています。フレームがすべて歪んでいて、幅が台無しになっているなどです。どんな提案も本当に多くのことに役立ちます。

4

2 に答える 2

2

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

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

または、GCD (私のお気に入り) を使用できます。

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

使用する方法に関係なく、データをバックグラウンド スレッドにロードしてからそのバックグラウンド スレッドからビューをロードしようとする場合は、常にメイン スレッドでその呼び出しを行うようにしてください。そうしないと、言及した奇妙な動作が発生します。 .

于 2011-06-27T16:45:53.233 に答える
0

viewDidAppear にアクティビティ インジケーターを表示してから、バックグラウンド スレッドでデータを取得できます。ビュー/テーブルビューを更新するだけで済みます。この方法では、モーダル ビューは表示時に 5 秒または遅延しません。

于 2011-06-27T16:44:31.037 に答える