5

我正在使用 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 一样使用它。

4

3 回答 3

2

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

因此,如果您只是下载 animage并将其分配给对象的某些属性(就像您正在将其分配给thumbnail),如果您稍后访问该属性 if 将简单地绕过缓存机制。

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

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

  2. 当您第一次下载图像时,请照常调用SDWebImageManager downloadWithURL:方法;这也将图像存储在缓存中;(您已经按照上面的代码执行此操作)

  3. 创建thumbnail一个访问缓存的只读属性,以检索与 关联的图像thumbnailURL

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

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

- (UIImage*)thumbnail {

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

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

希望这可以帮助。

于 2013-06-15T13:10:31.313 回答
1

我认为你走错了路。

如果您想使用SDWebImageUITableViewThan Do Follow”。

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

#import <SDWebImage/UIImageView+WebCache.h>

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

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

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

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

一切顺利

于 2013-06-15T10:00:41.750 回答
0

我更喜欢以下方法在 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类别
https://github.com/rs/SDWebImage的GIF动画

于 2013-06-15T11:07:09.820 回答