异步图像加载错误

时间:2012-05-15 09:10:06

标签: iphone ios

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

3 个答案:

答案 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”属性中。