首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在解析XML之前不显示进度HUD

在解析XML之前不显示进度HUD
EN

Stack Overflow用户
提问于 2012-08-10 20:16:16
回答 2查看 259关注 0票数 0

我实际上使用NSXMLParser类来解析服务器上托管的XML文件。在解析器执行其工作的同时,我想显示HUD获取的进度:https://github.com/jdg/MBProgressHUD

下面是我显示进度HUD的方式:

代码语言:javascript
运行
复制
MBProgressHUD *hud = [MBProgressHUD showHUDAddedTo:self.view animated:NO];
hud.labelText = @"Update"; 

然后,我使用自己创建的类启动解析器:

代码语言:javascript
运行
复制
[dm parseXMLAtURL:[NSURL URLWithString:@"myXML.xml.php"]];

下面是完整的类方法:

代码语言:javascript
运行
复制
- (void)parseXMLAtURL:(NSURL *)XMLUrl {
    NSXMLParser *parser = [[NSXMLParser alloc] initWithContentsOfURL:XMLUrl];
    [parser setDelegate:self];
    NSLog(@"start");
    [parser parse];    
}

显然,我在解析XML之前调用了MBProgressHUD,但这是不可能的:解析器完成工作时会显示MBProgressHUD

我认为这个问题可能是由于栈管理,当他在别人之前做最长的工作时(解析完整的XML需要6-7秒),我说的对吗,或者这可能是另一回事?如果我是对的,我该怎么做呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-08-10 20:28:15

我不能从您发布的代码中确定,但这很可能是因为XML解析器阻塞了您的主线程。

要解决这个问题,可以使用dispatch_async或类似的方法将XML解析派生到另一个线程。这也在用法下的HUD自述文件中进行了解释。

问候

票数 2
EN

Stack Overflow用户

发布于 2012-08-10 20:26:40

你是赖特,这与时机有关。因为所有的操作都是在同一个线程上完成的。只需将XML的解析延迟几毫秒:

代码语言:javascript
运行
复制
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解析那样好,但它可以工作。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11901505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档