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之前工作完美

+0

你打电话'[给messageManager reloadData]'后的数据获取情况不会发生,它的第一个发出后立即发生。请记住,当你分派时,主线程上的代码执行会立即继续执行下一条语句'reloadData'。 – dirkgroten

我觉得你的代码有问题。请重新加载表数据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]; 
     }); 
    });  
} 
+1

为什么在主线程上解析xml?我将移动'[xmlParserObject parse];'调用dispatch_async(dispatch_get_main_queue()')之上的行,以便它在后台运行。只需要在主线程上调用reloadData。 –

+0

只提供重载代码在dispatch_get_main_queue()和其他代码中你想要的不会发出 – iMHitesh

+0

“只把重载代码放到dispatch_get_main_queue()和其他你想要的地方不会发出问题的代码。”这不是一句话。把XML在解析XML时,解析主线程中的代码会导致UI冻结,如果XML很大,可能会导致很长的UI冻结,甚至可能导致系统以无响应方式终止应用程序。没关系** –