等待块完成重新加载UITableView数据

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文件来获取数据.

Nic*_*ick 5

我认为你只需要将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)