我实际上是使用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)我是对的还是可能是另一种东西?如果我是对的,我该如何管理呢?
答案 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自述文件中进行了解释。
此致