2011-04-13 60 views
1

我遇到了一个共同的TableView数据重新加载问题。我已阅读了许多关于同一主题的问题,但是问题与我的问题完全不同......iPhone:UITableView reloadData计时问题

我有一个基于导航的应用程序。在RootViewController的viewDidLoad方法中,我发出请求以获取JSON数据(文章)。当连接完成加载时,我为每个条目创建自定义Article对象。 Article类有一个initWithDictionnary方法,用于初始化对象的属性,最重要的是创建一个下载图像的请求。当连接完成加载时,我设置了Article对象的图像属性。 目标是用下载的图像初始化cell.imageView.image属性。那时,你可能已经猜到了问题所在。 图像是在单元格图像被渲染后下载的,因此在单元格重新加载之前它会一直保持为空(例如,如果它离开屏幕然后又回来)。 我想我应该在某个时间调用reloadData,但是我不知道什么时候会。理想情况下,我会在所有单元格加载时调用它,但似乎不可能。 我已经尝试了一堆疯狂的东西,比如等待一个单元格加载,并尝试重新加载前一个,但它没有奏效。 通过阅读Q &在这里,我了解了Apple的LazyTableImage示例代码,但我不明白所有这一切,所以我不确定我应该/可以使用它。

请问我是否需要更多的细节。

预先感谢任何帮助。

+0

使用异步图像加载。 – Till 2011-04-13 12:31:51

+0

好吧,我会试试看。谢谢。 – teum 2011-04-13 13:40:47

回答

1

您必须异步加载图像。请记住,您的表格数据应该包含每行的字段,指定是否加载图像,以便(如果为true)可以跳过加载并仅显示缓存的图像。

看这个问题,第一:Load images async

+0

我正在下载图片的方式: 'NSURLRequest * request = [NSURLRequest requestWithURL:[NSURL URLWithString:imageUrl]]; [[NSURLConnection alloc] initWithRequest:request delegate:self];'本质上不是异步吗? – teum 2011-04-13 13:35:45

+0

它是异步的(看到它提供了一个用于捕获数据的委托),但是当从请求中读取NSData时,它会进行单步执行。希望它很明确 – 2011-04-15 07:31:32

+0

是的,从请求中读取NSData是同步发生的,因此加载映像必须在正确的时间完成。这是(而不是)我的问题。我终于选择了遵循Apple提供的懒惰图片加载代码示例。我昨天调整了它到我的应用程序,但猜猜看,我仍然有同样的问题(图片仅在单元格离开屏幕然后返回时加载),但今天我会调查它... – teum 2011-04-15 08:19:42

0

大约有10的懒加载图像UITableView的教程。选一个。

在一段时间之后,您将通过查看教程来了解它。坚持下去,这是一个重要的概念,不仅适用于本项目,还适用于您的其余编程生涯。你的表细胞样TTImageView(Three20框架)内

Lazy Loading Image UITableView Tutorials that'll make you smarter!