我使用的是three20项目为我的iPhone应用程序。我已经收窄我的问题来,现在我只是想重新创建示例中的“表网页图片”随附项目。我复制的代码的究竟的作为项目,我不使用TTNavigator(其中的例子一样),但我手动添加我的TTTableViewController到的TabBar。例外

问题是如下;在表中的图像应当从网络自动加载,像在实例。但他们只负载的之后的我滚动桌子上下。

在上面清清楚楚地写着它下载图像,你可以看到活动指示灯纺纱像永远..除非我曾经向上和向下滚动,图像将不会出现。控制台

任何?由于事先。

P.S: 如果我在任何随机的UIView使用此代码,它也不能正常工作(只显示一个黑色方块):

TTImageView* imageView = [[[TTImageView alloc] initWithFrame:CGRectMake(30, 30, 100, 100)] autorelease];
imageView.autoresizesToImage = YES;
imageView.URL = @"http://webpimp.nl/logo.png";
[self.view addSubview:imageView];

如果我把这个代码在我的AppDelegate(右到窗口),它的工作..奇怪?

<强>可能的解决方案: 虽然我停止使用TTImageView为了这个目的,我认为我找到了什么问题了;线程(因此接受德尼兹莫特Edincik的回答)。如果我一开始异步下载(因为基本上是所有的TTImageView是,异步下载)从任何地方,但主线程,它不会启动。如果我一开始在主线程下载,它会立即开始..

有帮助吗?

解决方案

听起来像是一个线程问题我,你在主runloop创建TTImageView?

其他提示

我发现一个有趣的事情。当我使用组合TTTableViewController,TTTableViewDataSource和TTModel我有装载TTImageView同样的问题。我的问题是,我的实现模型方法“isLoading”和“isLoaded”的不模型的初始化后返回正确的价值观。这迫使我manualy在“viewDidAppear”方法调用的模型重新加载,并且导致图像加载问题。所以,我修我的“isLoading”和“isLoaded”的方法来初始化型号后都返回“否”的,一切都很好。

当的图像完成加载试发送reloadData消息给表视图。这迫使表重新计算行的大小和重绘表。只是要小心,你不开始响应此消息再次下载图像。

我已经写了一些与此类似,其中的图像视图会从网页加载自己的形象。

林我的经验,当图像已成功加载但在其观点未示出,它是一个需要的细胞被告知重绘的情况。

在滚动表视图,细胞被设置为重绘当来到屏幕上,这就是为什么当您滚动它们出现。

当加载图像,告诉它是坐在通过发送消息setNeedsDisplay重绘细胞。

这样一来,当图像完成下载,该细胞在其(与仅细胞)坐将重绘自身以显示新的图像。

这是可能的,你可能不需要重绘整个小区也许能逃脱简直重绘使用相同的方法调用图像视图。在我的经验,我的表格单元视图层次被平坦化,所以我不得不重绘全细胞。

我没有为你的的答案想的做,但我会说,这被认为是功能,和预期的行为。当你想要做的图像延迟加载您可以使用TTImageView中的UITableView。 TTImageView只会加载其框架是在屏幕上看到的图像。通过这种方式,该设备使用其网络资源下载,用户在他们面前的图像,而不是一堆用户甚至没有试图看图像。

考虑具有长列表可以包含几百缩略图图像(像的朋友的列表)。我从经验中知道,如果你开球旧设备上的100多个图像的请求,内存使用情况将通过屋顶和您的应用程序可能会崩溃。 TTImageView解决了这个问题。

这是一个线程的问题。可以通过包括线加载的图像:

[TTURLRequestQueue mainQueue].suspended = NO;

- (void)didLoadModel:(BOOL)firstTime

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top