在解析XML之前不显示Progress HUD

时间:2012-08-10 12:16:16

标签: iphone ios stack nsxmlparser mbprogresshud

我实际上是使用NSXMLParser类来解析服务器上托管的XML文件。 当解析器正在完成他的工作时,我想展示HUD抓住的进度:https://github.com/jdg/MBProgressHUD

以下是我展示Progress 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之前显然会调用MBProgressHUD但是没有办法:解析器完成工作时会显示MBProgressHUD

我认为这个问题可能是由于堆栈管理,当他在其他人之前完成最长的工作时(解析完整的XML需要6-7次secondes)我是对的还是可能是另一种东西?如果我是对的,我该如何管理呢?

2 个答案:

答案 0 :(得分: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解析那么好,但它会起作用。

答案 1 :(得分:2)

我无法从您发布的代码中确切地说,但很可能是因为XML解析器阻止了您的主线程。

要修复它,请使用dispatch_async或类似方法将XML解析生成到另一个线程。这也在使用中的HUD自述文件中进行了解释。

此致