AlamofireImage 下载到 CoreData

Posted

技术标签:

【中文标题】AlamofireImage 下载到 CoreData【英文标题】:AlamofireImage download into CoreData 【发布时间】:2017-07-07 15:37:46 【问题描述】:

我想缓存图像和 json 中的少量数据以使持久性我知道 Alamofire Image 有它自己的 chade 方法,但我想只有当应用程序处于活动状态时,应用程序关闭并再次打开 chache 被清除,所以我必须再次下载图片。所以 如果我的图片是这样下载的

image.af_setImage(withURL: url)

可以保存

imageEntity.save(image.image)

不确定是否完全是代码,但想法是将下载的图像保存为 CoreData 中的图像集。 以及这种方法的逻辑背后的任何想法,以检查图像是否存在于 coreData 中并从 if not 下载并保存到 coreData 中显示

【问题讨论】:

我很确定 AF 的图像缓存没有像您描述的那样被清除。 更好地使用github.com/rs/SDWebImage 它有更灵活的缓存选项。 【参考方案1】:

CoreData 不是为存储 ImageData 或大数据(文件)而设计的,而只是存储字符串、日期、整数......就像普通数据库一样。

如果要保存数据,可以使用 AlamofireImageCache 并将 CoreData 实体中的图像标识符保存为字符串。这是最简单的方法。

let imageCache = AutoPurgingImageCache(
    memoryCapacity: 100_000_000,
    preferredMemoryUsageAfterPurge: 60_000_000
)
imageCache.add(yourImage, withIdentifier: "YourImageIdentifier")
imageEntity.identifier = "YourImageIdentifier"

然后如果你想得到你的图像,你可以这样做:

let cachedAvatar = imageCache.image(withIdentifier: imageEntity.identifier)

有关缓存的更多信息,请查看 AlamofireImage 文档:https://github.com/Alamofire/AlamofireImage

更新

如果你想在硬盘上创建自己的 ImageCache,这里有一个存储图像的示例:

func saveImage(image:UIImage)

     if let data = UIImagePNGRepresentation(image) 

            let documentPath = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]!
            let filename = documentPath.appendingPathComponent("YourImageName")
            try? data.write(to: filename)
     


func getImage(ForName name:String) -> UIImage? 
    let documentPath =    FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]!   
    let filename = documentPath.appendingPathComponent("YourImageName")         
     return UIImage(contentsOf:URL(fileURLWithPath: filename)) 
 

希望对您有所帮助! 皮埃尔

【讨论】:

AutoPurgingImageCache 是内存缓存,这意味着它会在您退出应用程序时清除所有缓存的图像 那么如何让它保持应用退出 你不能让它持续工作。尝试使用像 SDWebImage 这样的东西,它有更灵活的缓存,可以配置为内存或持久化github.com/rs/SDWebImage。 我几乎可以肯定 alamofireCache 将图像存储在硬盘上而不是内存中。 是的,它在设备存储中使用了一个空间,问题是在应用程序关闭后是否删除了所有缓存,如果没有,那么如果应用程序处于离线状态,它应该返回缓存图像。

以上是关于AlamofireImage 下载到 CoreData的主要内容,如果未能解决你的问题,请参考以下文章

AlamofireImage:如何使用 POST 请求下载图像

Swift - AlamofireImage 下载多个 URL 并显示在 CollectionView 中

AlamofireImage : 每次应用启动后缓存为空

在 Swift 中使用 AlamofireImage 将 GIF 图像转换为 UIImageView

AlamofireImage addAuthentication 不添加授权标头

Swift 4 中的 AlamofireImage 问题