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];    
}

我显然MBProgressHUD在解析 XML 之前调用了 ,但没有办法: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 解析生成到另一个线程。这也在 HUD 自述文件中的用法下进行了解释。

问候

于 2012-08-10T12:28:15.227 回答