我目前有一个关于 block 的问题,它自己的应用程序正在从 XML 文档加载报告。解析器工作但是我在将它加载到 mainArray 并在 block 完成后重新加载数据时遇到问题。我曾尝试使用信号量在进程完成时将事件设置为关闭。然而,由于 XML 的加载速度不是很快,因此填充了 mainArray 并重新加载了 UITableView 的数据。我目前正在使用这个:
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, kNilOptions), ^{
XmlParser *xml = [[XmlParser alloc]init];
NSURL *url = [NSURL URLWithString:kStaticURL];
[xml loadXML:url];
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(10 * NSEC_PER_SEC)), dispatch_get_main_queue(),^{
mainArray = [xml parsedArray];
[UiTableView reloadData];
});
});
这将正确地填充数组并加载我想要的对象。 我将如何获得此代码:
mainArray = [xml parsedArray];
[UiTableView reloadData];
之后执行
XmlParser *xml = [[XmlParser alloc]init];
NSURL *url = [NSURL URLWithString:kStaticURL];
[xml loadXML:url];
提前致谢。
编辑:我正在使用 TBXML 将 XML 提要解析为 [xml parsedArray];具体是TBXML+HTTP.h&.m文件抓取数据。
最佳答案
我认为你只需要将 dispatch_after 更改为 dispatch_async(dispatch_get_main_queue(), 在 xml 解析完成之前不应执行。
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
XmlParser *xml = [[XmlParser alloc]init];
NSURL *url = [NSURL URLWithString:kStaticURL];
[xml loadXML:url];
}
dispatch_async(dispatch_get_main_queue(), ^{
mainArray = [xml parsedArray];
[UiTableView reloadData];
});
});
关于ios - 等待 block 完成以重新加载 UITableView 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25681544/