ios - 等待 block 完成以重新加载 UITableView 数据

标签 ios objective-c uitableview ios7 objective-c-blocks

我目前有一个关于 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/

相关文章:

UIWebView 中的 Javascript 回调到 C/Objective-C

ios - 根据文本量更改 UITableViewCell 高度

ios - UITapGesture 仅识别 UIImageView 边框上的点击

ios - RunLoop 如何减少 CPU 周期

ios - 在 XCTestCase 中使用 UIImage imageNamed

ios - 我在所有模拟器的屏幕顶部和底部都有一个大黑条

ios - 在 UITableViewCell 中显示每个字典值

iphone - UISegmentedControl 在 UIView 中没有响应

objective-c - UIToolBar按钮图像

ios - 同时使用不同的动画曲线对自动布局约束进行动画处理