我实际上使用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之前调用了MBProgressHUD,但这是不可能的:解析器完成工作时会显示MBProgressHUD。
我认为这个问题可能是由于栈管理,当他在别人之前做最长的工作时(解析完整的XML需要6-7秒),我说的对吗,或者这可能是另一回事?如果我是对的,我该怎么做呢?
发布于 2012-08-10 20:28:15
我不能从您发布的代码中确定,但这很可能是因为XML解析器阻塞了您的主线程。
要解决这个问题,可以使用dispatch_async或类似的方法将XML解析派生到另一个线程。这也在用法下的HUD自述文件中进行了解释。
问候
发布于 2012-08-10 20:26:40
你是赖特,这与时机有关。因为所有的操作都是在同一个线程上完成的。只需将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解析那样好,但它可以工作。
https://stackoverflow.com/questions/11901505
复制相似问题