由于我是iPad应用程序开发的新手,请帮我解决一个简单的问题
我想从服务器在tableview中显示图像。它显示正确。
但是当我向上滚动表并再次回到那里时,它将再次从服务器下载图像数据
请帮帮我。
编辑:
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;
提前致谢。
答案 0 :(得分: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更新发送回主线程,否则您将遇到崩溃。