2

次のコードを含む UITableView があります。

- (void)viewDidLoad {
    [super viewDidLoad];
    parser = [[XMLParser alloc] init];
    [parser parseXML];

私の問題は、UITableView でビュー コントローラーを表示する前にすべてを解析しているため、起動に時間がかかりすぎることです。また、別の UITableView を設定して別の XML を (別のタブで) 解析すると、タップして別のタブに移動しますが、他の XML を解析している間にハングし、完了すると UITableView が表示されます。

解析を開始するタイミング、UITableView をリロードするタイミング、および解析コードの実行中に読み込み画面を表示する方法に関する情報を探しましたが、何も思いつきませんでした。

誰にもアイデアはありますか?

4

2 に答える 2

3

次のようなものを呼び出すことができます

[parser performSelectorInBackground:@selector(parseXML) withObject:nil];

メインスレッドで parseXML コードを別のスレッドで実行します。そのスレッドから ui を更新しないように注意してください。パーサー スレッドから UI を更新するには、次のようなものを呼び出す必要があります。

[self performSelectorOnMainThread:@selector(XMLUpdated:) withObject:self waitUntilDone:NO];
于 2009-08-26T13:40:57.827 に答える
1

画面をロードすることでアクティビティインジケーターを意味する場合、メインスレッドで解析するとブロックされ、インジケーターが画面に表示されないため、解析前にアニメーション化されたインジケーターを追加しようとしても機能しない可能性があります。これを回避するには、バックグラウンド スレッドで解析を行います。これにより、解析が完了すると、解析オブジェクトが viewController にメッセージを送信して、テーブルビューを表示する準備ができていることがわかるように、インジケーターが表示されます。(UIKit はスレッド セーフではなく、performSelectorInMainThread を使用せずにバックグラウンド スレッドから UI 要素を更新しようとしないでください)

于 2009-08-21T13:18:11.863 に答える