Tin*_*757 0 objective-c uitableview ios objective-c-blocks ios7
我目前有一个关于块的问题,它自己正在从XML文档加载报告的应用程序.然而,解析器工作时将它加载到mainArray并在块完成后重新加载数据时遇到问题.我尝试使用信号量在进程完成时关闭事件.但是因为加载时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];
});
});
Run Code Online (Sandbox Code Playgroud)
然后,这将正确填充数组并从对象中加载我想要的内容.我如何获得此代码:
mainArray = [xml parsedArray];
[UiTableView reloadData];
Run Code Online (Sandbox Code Playgroud)
之后执行
XmlParser *xml = [[XmlParser alloc]init];
NSURL *url = [NSURL URLWithString:kStaticURL];
[xml loadXML:url];
Run Code Online (Sandbox Code Playgroud)
提前致谢.
编辑:我正在使用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];
});
});
Run Code Online (Sandbox Code Playgroud)