【问题标题】:NSOperation to perform uitableview cell imageNSOperation 执行 uitableview 单元格图像
【发布时间】:2011-06-02 14:03:53
【问题描述】:


由于我是 iPad 应用程序开发的新手,请帮助我解决简单的问题。
我想在服务器的 tableview 中显示图像。它显示正确。
但是当我向上滚动表格并再次回到那里时,它将再次从服务器下载图像数据。
请帮帮我。

编辑:
表视图:cellForRowAtIndexPath:

static NSString *CellIdentifier = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleBlue];
UIImageView *imgView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 1024, 75)];
[imgView setImage:[UIImage imageNamed:@"strip_normal.png"]];
[imgView setHighlightedImage:[UIImage imageNamed:@"strip_hover.png"]];
[cell addSubview:imgView];
[imgView release];

UIImageView *imgView1 = [[UIImageView alloc] initWithFrame:CGRectMake(5, 5, 64, 64)];
imgView1.tag = indexPath.row;
UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abc.com/abc/%@.png", [[arrMyCourses objectAtIndex:indexPath.row] valueForKey:@"CourseNumber"]]]]];
[imgView1 setImage:img];
[cell addSubview:imgView1];
[imgView1 release];

return cell;

提前致谢。

【问题讨论】:

  • 你目前是如何实现你的tableView:cellForRowAtIndexPath:的?
  • @Deepak,请查看我编辑的问题。

标签: ipad uitableview uiimageview nsoperationqueue


【解决方案1】:

你的问题是这一行

UIImage *img = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.abc.com/abc/%@.png", [[arrMyCourses objectAtIndex:indexPath.row] valueForKey:@"CourseNumber"]]]]];

每次表格视图请求单元格时,您都在下载图像,相信我这种情况经常发生,因为表格视图不会一次构建整个视图。它重用离开屏幕的单元格来呈现新的可见单元格。因此,一旦单元格离开屏幕并重新打开,就会再次调用cellForRowAtIndexPath:。所以图像被再次下载。您还将同步下载图像,这也会阻止 UI。

要解决此问题,您应该考虑在开始时下载一次并将它们保存在本地的临时位置,并在必要时将它们加载到内存中。将它们全部保存在内存中可能会很昂贵。此外,使用performSelectorInBackground:withObject 将您的下载移至后台。您必须将 UIKit 更新发送回主线程,否则您将遇到崩溃。

【讨论】:

  • 您是否有任何可用的示例代码,如果有,请提供给我,否则我已经完成了,但我不知道如何发送单元格位置以及特定单元格的 URL。感谢您的回复。
  • 网上有很多资源可以展示如何正确地做到这一点。 Here 来自 Apple 的示例代码。你也可以看看thisthis
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2011-08-17
  • 2012-06-27
  • 1970-01-01
  • 2011-09-13
  • 2015-05-01
相关资源
最近更新 更多