我正在尝试异步加载tableViewCell中的图像。 当我上下移动桌子时,图像不会出现。
AsyncImageView包含NSUrlConnection。它不会进入委托“connectionDidFinishLoading”。但当我向上或向下移动表格时,它会进入此委托函数
以下是代码
CGRect frame;
frame.size.width=115; frame.size.height=100;
frame.origin.x=0; frame.origin.y=0;
AsyncImageView* asyncImage = [[[AsyncImageView alloc]
initWithFrame:frame] autorelease];
loadingTable=[[UIActivityIndicatorView alloc] initWithFrame:frame];
[cell.contentView addSubview:loadingTable];
[loadingTable startAnimating];
asyncImage.tag = 999;
NSURL* url = [NSURL URLWithString:[[videoCollection objectAtIndex:indexPath.row] videoImageUrl] ];
[asyncImage loadImageFromURL:url activity:loadingTable];
[cell.contentView addSubview:asyncImage];
答案 0 :(得分:1)
首先加载所有图像并添加一些数据结构,如数组,然后显示到表中。不要将您的UI与网络电话重叠。
答案 1 :(得分:0)
我相信你知道,所有与UI相关的业务都必须在主线程上完成。但是,下载大量数据可以而且应该在后台完成。这个tutorial与Grand Central Dispatch可能正是您所需要的。
在后台线程中下载图像,当它完成时,让主线程知道这一点,并在主线程上更新UI。
答案 2 :(得分:0)
我昨天已经这样做了。
最好的方法是在后台和- (UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath
方法中调用下载。
此方法将在用户想要查看时加载单元格的图像。
但警告!为防止多次下载相同的图像,您应该使用数据结构(如字典)来检查图像是否已下载。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
...
if([myPictures objectForKey:indexPath.row] == nil) {
[self performSelectorInBackground:@selector(downloadPhotoInBackground:) withObject:indexPath];
}
return cell
}
并在downloadPhotoInBackground:中,不要忘记将下载的图像添加到“myPictures”属性中。