0

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

4

2 回答 2

1

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

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

参考NSXMLParserDelegate

于 2012-12-26T09:15:10.320 回答
0

如果您在调度队列中进行削减,则必须更新主队列上的 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];
    });
});
于 2012-12-26T09:13:21.417 回答