缓存图像以供离线使用 SDWebImage

Cache image for use offline SDWebImage

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

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

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

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

导入 UIImageView+WebCache.h header,并在 viewcontroller 中调用 setImageWithURL:placeholderImage: 方法。 SDWebImage lib 将为您处理,从异步下载到缓存管理。

我假设你想要存档的是那种 feed,在你的应用程序 killed/restarted 之后你有 4-5 张图片显示并且你没有互联网连接 - 就像 Instagram 一样.

您可能会这样,当您连接到 Internet 时,可以像往常一样下载图像,并将 4-5 张图像作为 NSData 存储到您的核心数据中。

然后您可以将这些图像用作占位符,并且当用户没有连接时您将拥有 "content"。

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

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

这里是

的完美教程

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

您可以使用 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");
                    }];
                }
            }];
        }
    }] ;