【问题标题】:iOS: table view created before xml parsing completeiOS:在 xml 解析完成之前创建的表视图
【发布时间】:2012-12-11 21:03:19
【问题描述】:

好的,我希望我在这里遗漏了一些基本的东西——我不是这方面的专家。它应该是不言自明的,没有示例代码: 我解析了一个 web 托管的 xml 文件,该文件包含要在 tableView 中显示的标题列表以及在选择单元格时传递给 webView 的关联 URL。解析发生在 tableView 到字典中。如果我在主线程上解析它工作得很好,但如果信号很差,我担心会挂起 UI。因此,我按照此处的示例将解析调用包装在调度队列中,现在它显示了一个空表。但是,如果我返回视图层次结构并再试一次(它嵌入在导航控制器中),那么它就可以工作,我的表已经完全填充。 我假设通过使用辅助线程以某种方式在填充内容数组之前创建表。我该如何解决这个问题? 谢谢!安德鲁

【问题讨论】:

  • 你应该加载你的表,只有在从 xml 解析数据之后

标签: ios uitableview xml-parsing dispatch


【解决方案1】:

实现NSXMLParser- (void)parserDidEndDocument:(NSXMLParser *)parser委托方法。并从该方法调用您的 tableView 的reloadData

- (void)parserDidEndDocument:(NSXMLParser *)parser
{
   dispatch_sync(dispatch_get_main_queue(), ^{
       [yourTable reloadData];
   });
}

参考NSXMLParserDelegate

【讨论】:

  • @user1084420: 很高兴:)
【解决方案2】:

如果您在调度队列中进行分析,则必须更新主队列上的 UI。

我正在做类似的事情。这是我的代码:

dispatch_queue_t imgDownloaderQueue = dispatch_queue_create("imageDownloader", NULL);
dispatch_async(imgDownloaderQueue, ^{
    NSString *avatarUrlString = [avatarImageDictionary objectForKey:@"url"];
    avatarImage = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:avatarUrlString]]];

    dispatch_sync(dispatch_get_main_queue(), ^{
        id asyncCell = [self.tableView cellForRowAtIndexPath:indexPath];
        [[asyncCell avatarImageView] setImage:avatarImage];
    });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-19
    • 2023-01-31
    • 1970-01-01
    • 1970-01-01
    • 2023-03-05
    • 2021-12-03
    • 1970-01-01
    相关资源
    最近更新 更多