0

私は実際NSXMLParserに、サーバーでホストされているXMLファイルを解析するためにこのクラスを使用しています。パーサーが仕事をしている間、HUDがそこで取得した進捗状況を表示したいと思います:https ://github.com/jdg/MBProgressHUD

これが私がプログレスHUDを示す方法です:

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:NO];
hud.labelText = @"Update"; 

次に、作成したクラスを使用してパーサーを開始します。

[dm parseXMLAtURL:[NSURL URLWithString:@"myXML.xml.php"]];

これがフルクラスのメソッドです:

- (void)parseXMLAtURL:(NSURL *)XMLUrl {
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:XMLUrl];
    [parser setDelegate:self];
    NSLog(@"start");
    [parser parse];    
}

XMLを解析する前に、明らかにMBProgressHUDbeforeを呼び出しますが、方法はありませんMBProgressHUD。パーサーがジョブを終了すると、が表示されます。

この問題は、スタック管理が原因である可能性があります。彼が他の人よりも先に最も長い仕事をしている場合(完全なXMLの解析には6〜7秒かかります)私は正しいですか、それとも別の問題である可能性がありますか?そして、私が正しければ、どうすればこれを管理できますか?

4

2 に答える 2

3

あなたはそれがタイミングと関係があることを知っています。すべてが同じスレッドで行われるためです。XML の解析を数ミリ秒遅らせるだけです。

MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:NO];
hud.labelText = @"Update"; 
[dm performSelector:@selector(parseXMLAtURL:)  withObject:[NSURL URLWithString:@"myXML.xml.php"] afterDelay:0.1f];

新しいスレッドで XML 解析を実行するほど良くはありませんが、動作します。

于 2012-08-10T12:26:40.187 に答える
2

あなたが投稿したコードからは確かなことは言えませんが、XML パーサーがメイン スレッドをブロックしている可能性があります。

dispatch_asyncこれを修正するには、または同様の方法を使用して、XML 解析を別のスレッドに生成します。これは、Usage の下の HUD Readme でも説明されています。

よろしく

于 2012-08-10T12:28:15.227 に答える