dispatch_async与XML解析器不工作
我在uitable视图解析XML数据的时候,这里使用dispatch_async是我的代码:dispatch_async与XML解析器不工作
- (void) Parse{
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSString *post =[[NSString alloc] initWithFormat:@"http://messages.xml"];
NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:post]];
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData];
[xmlParserObject setDelegate:self];
dispatch_async(dispatch_get_main_queue(), ^{
[xmlParserObject parse];
});
});
[messageList reloadData];
}
现在的UITableView不显示任何数据。它在dispatch_async之前工作完美
我觉得你的代码有问题。请重新加载表数据dispatch_get_main_queue()
- (void) Parse {
dispatch_async(dispatch_get_global_queue(0, 0), ^{
NSString *post =[[NSString alloc] initWithFormat:@"http://messages.xml"];
NSData *xmlData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:post]];
xmlParserObject =[[NSXMLParser alloc]initWithData:xmlData];
[xmlParserObject setDelegate:self];
[xmlParserObject parse];
dispatch_async(dispatch_get_main_queue(), ^{
[messageList reloadData];
});
});
}
为什么在主线程上解析xml?我将移动'[xmlParserObject parse];'调用dispatch_async(dispatch_get_main_queue()')之上的行,以便它在后台运行。只需要在主线程上调用reloadData。 –
只提供重载代码在dispatch_get_main_queue()和其他代码中你想要的不会发出 – iMHitesh
“只把重载代码放到dispatch_get_main_queue()和其他你想要的地方不会发出问题的代码。”这不是一句话。把XML在解析XML时,解析主线程中的代码会导致UI冻结,如果XML很大,可能会导致很长的UI冻结,甚至可能导致系统以无响应方式终止应用程序。没关系** –
你打电话'[给messageManager reloadData]'后的数据获取情况不会发生,它的第一个发出后立即发生。请记住,当你分派时,主线程上的代码执行会立即继续执行下一条语句'reloadData'。 – dirkgroten