0

我正在尝试异步加载 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];
4

3 回答 3

1

首先加载所有图像并将它们添加一些数据结构,如数组,然后将其显示到表格中。不要将您的 UI 与网络调用重叠。

于 2012-05-15T09:12:05.400 回答
0

相信大家都知道,所有 UI 相关的业务都必须在主线程上完成。但是,下载大量数据可以而且应该在后台完成。而本教程与 Grand Central Dispatch 可能正是您所需要的。

在后台线程中下载图像,完成后,让主线程知道这一点并在主线程上更新 UI。

于 2012-05-16T08:35:28.930 回答
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”属性中。

于 2012-05-16T08:47:03.413 回答