缓存图像以供离线使用 SDWebImage

Posted

技术标签:

【中文标题】缓存图像以供离线使用 SDWebImage【英文标题】:Cache image for use offline SDWebImage 【发布时间】:2016-10-14 09:26:26 【问题描述】:

我正在使用 SDWebImage 从不同的 URL 下载图像,现在我想知道是否可以下载这些图像并将它们存储在某个位置,以便当我离线并启动我的应用程序时我仍然可以看到它们?

我注意到 Instagram 使用了类似的东西,一旦你下载了图像,你可以关闭应用程序离线,然后重新打开应用程序,你仍然可以看到图像。

我认为 SDWebImage 可以做到这一点,但不确定,如果不可能,请纠正我。

非常感谢任何可以提供帮助的人!

【问题讨论】:

是的,这可以通过 SDWebImage 实现。 @Rahul 感谢您的确认,您知道我在哪里可以找到一些教程或解释它的地方吗? 【参考方案1】:

我假设您要存档的是那种提要,在您的应用被终止/重新启动并且您没有互联网连接(就像 Instagram 一样)后,您会在其中显示 4-5 张图片。

对您来说,一种可能性是,当您有互联网连接时,按照您习惯的方式下载图像,并将 4-5 个图像作为 NSData 存储到您的核心数据中。

然后您可以将这些图像用作占位符,并且在用户没有连接时您将拥有“内容”。

这是将图像转换为 NSData 并返回的代码:

let dataFromImage = UIImagePNGRepresentation(image!)!
let imageFromData = UIImage(data: imageData)

这里是how to store images into core data.的完美教程

然后,您可以使用核心数据中的图像填充 tableView(例如),以防reachability == false

【讨论】:

【参考方案2】:

导入 UIImageView+WebCache.h 标头,并在视图控制器中调用 setImageWithURL:placeholderImage: 方法。 SDWebImage lib 将为您处理,从异步下载到缓存管理。

【讨论】:

我已经有了,我想要的是能够在没有互联网的情况下访问我的应用程序,并查看我上次打开应用程序时下载的图像以访问互联网 SDWebImageManager根据图片的url字符串自动缓存图片。【参考方案3】:

您可以使用SDWebImage 将图像存储在应用目录中,而不是手动存储。使用SDImageCache 会更简单。 diskImageExistsWithKey 通过回调确定您的图像是否存在于位置(在目录中或应用程序的临时文件夹中)。你只需检查一下! ...

[[SDImageCache sharedImageCache] diskImageExistsWithKey:localImagePath completion:^(BOOL isInCache) 
        if ( isInCache ) 
            image = [[SDImageCache sharedImageCache] imageFromDiskCacheForKey:localPath]; // it returns a simple UIImage 
[yourImageView setImage:[[SDImageCache sharedImageCache] imageFromDiskCacheForKey:localPath]]; // or set image in your UIImageView
         else 
            [yourImageView sd_setImageWithURL:[NSURL URLWithString:downloadPath] completed:^(UIImage * _Nullable image, NSError * _Nullable error, SDImageCacheType cacheType, NSURL * _Nullable imageURL) 
                if (image) 
                    [[SDImageCache sharedImageCache] storeImage:image forKey:localPath toDisk:YES completion:^ // This block will help you to store image from server to local directiry
                        NSLog(@"Downloaded");
                    ];
                
            ];
        
    ] ;

【讨论】:

以上是关于缓存图像以供离线使用 SDWebImage的主要内容,如果未能解决你的问题,请参考以下文章

如何缓存 Firebase 数据以供离线使用?

如何缓存 Google 地图图块以供离线使用?

如何在flutter mobile中保存网站以供离线使用

如何在 JavaScript 中保存网站以供离线使用

在 PhoneGap/Chrome 应用程序中存储视频以供离线使用

markdown 使用wget下载整个网站以供离线使用。