繁体   English   中英

SDWebImage UITableView单元格图像不能保持

[英]SDWebImage UITableView Cell Images Not Persisting

我正在使用SDWebImage库来异步下载和缓存图像和Web服务。 以下是我用来下载图像的方法:

- (void) downloadThumbnails:(NSURL *)finalUrl
{
    SDWebImageManager *manager = [SDWebImageManager sharedManager];
    [manager downloadWithURL:finalUrl
                     options:0
                    progress:nil
                   completed:^(UIImage *image, NSError *error, SDImageCacheType cacheType, BOOL finished)
     {
         if (image)
         {
             [self setThumbnail:image];
         }
     }];

}

它成功从Web服务下载图像并在tableview中显示它们。 但是它不会在应用程序运行之间保持图像。 为了缓存图像,还有什么我需要做的吗?

更新:请不要建议使用以下内容:

[cell.imageView setImageWithURL:[NSURL URLWithString:@"http://www.domain.com/path/to/image.jpg"]
                   placeholderImage:[UIImage imageNamed:@"placeholder.png"]];

因为,我的程序结构不同。 其次,如果您在这里阅读SDWebImage库的描述,您将会知道它可以像我使用SDWebImageManager一样使用它。

我怀疑SDWebImage中的缓存机制在这种特定情况下无法正常工作的原因是因为它基于图像URL。

因此,如果您只是下载一个image并将其分配给某个对象的属性(就像您将其分配给thumbnail ),如果您稍后访问该属性,只需简单地遍历缓存机制即可。

你可以做些什么来保持你的程序结构:

  1. thumbnailURL存储在您的self对象中;

  2. 当您第一次下载图像时,请调用SDWebImageManager downloadWithURL:方法; 这也会将图像存储在缓存中; (你已经根据上面的代码做了)

  3. 使thumbnail成为一个只读属性,用于访问检索与thumbnailURL关联的图像的缓存。

这是您应该做的最少量的更改。

这可能是第3点描述的只读属性的实现:

- (UIImage*)thumbnail {

    return [[SDImageCache sharedCache] imageFromDiskCacheForKey:self.thumbnailURL];
}

其中self.thumbnailURL是对象中保存图像URL的另一个属性。

希望这可以帮助。

我认为你走错了路。

如果你想使用SDWebImage进行UITableView SDWebImage以下。

1.通过以下语句导入UIImageView + WebCache.h,其中你有UITableView

#import <SDWebImage/UIImageView+WebCache.h>

2.在UITableView的cellForRowAtIndexPath方法中写下以下行

[cell.Logo setImageWithURL: finalUrl placeholderImage:[UIImage imageNamed:@"imagename.png"] options:SDWebImageRefreshCached];

  • 在UITableViewCell中将LOGO替换为图像视图的名称
  • imagename.png是项目中的图像名称,它将显示直到图像无法从Internet加载。

如果您遇到任何问题,请在此处评论

祝一切顺利

我更喜欢以下方法在tableview中进行异步图像下载。
实际上,您不需要自己处理SDWebImageManager

[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"]];
[cell.imageView setImageWithURL:[NSURL URLWithString:@"IMAGE_URL"] placeholderImage:[UIImage imageNamed:@"LOCAL_IMAGE_NAME"]];

确保在实现中导入了UIImageView+WebCache.h 同样的上述异步图像加载也可用于UIButton+WebCache.h类别和MKAnnotationView+WebCache.m类别。

新版SDWebImage还支持使用UIImage+GIF.h类别的GIF动画
https://github.com/rs/SDWebImage

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM