使用类别异步下载图像和更新TableView单元格,而不使用任何库

时间:2017-01-20 13:40:35

标签: ios uitableview uicollectionview

我们有SDWebImage库,它提供了一个类别(UIImageView + SDWebcache.m),用于图像下载,缓存,它还可以在UITableView或UIColllectionView单元上正确设置每个类别。我不想使用任何库,并希望创建一个类似的类别。下载图像后,如何跟踪此图像所属的单元格,并查看单元格是否可见,以避免将图像设置在已重复使用该单元格的另一个indexPath上。我写的代码(这里删除了缓存逻辑):

// Inside the category, I have this method
-(void)SetThumbImageFordownloadURL:(NSString*)url {

    [MyDownloadManager asyncImageDownload:url withProgressHandler:nil andCompletionHandler:^(UIImage *image, NSUInteger errorCode){

        dispatch_async(dispatch_get_main_queue(), ^{
            //if cell is not visible and is reused by another index, this image wil be set on wrong cell
            [self setImage:image];
        });

    }];

}

1 个答案:

答案 0 :(得分:0)

选项1:将单元格内的URL作为属性引用,并在重用方法中将其取出。

并在您的代码块中,返回图像的实际URL,并执行以下操作:

 [MyDownloadManager asyncImageDownload:url withProgressHandler:nil andCompletionHandler:^(UIImage *image, NSURL *url, NSUInteger errorCode){

        dispatch_async(dispatch_get_main_queue(), ^{
            //check if current hold key is equal to url and only then set the image.



            [self setImage:image];
        });
    }];

选项2 /微调:将取消方法添加到您的" MyDownloadManager" ,并取消当前下载" didEndDisplay" tableview / collectionview的方法。