预植入Kingfisher图片缓存失效,需确认是否遗漏缓存状态文件
Kingfisher预打包缓存失效的问题解决
你只备份了图片文件,但Kingfisher的缓存系统依赖元数据数据库追踪缓存状态,这个数据库默认和图片文件在同一目录下,包含
KingfisherCache.sqlite、KingfisherCache.sqlite-shm、KingfisherCache.sqlite-wal三个核心文件。仅复制图片文件的话,Kingfisher无法识别这些缓存,所以isCached(forKey:)会返回false。正确操作步骤:
- 用Kingfisher下载完目标图片后,完整备份
Library/Caches/com.onevcat.Kingfisher.ImageCache.default目录下的所有文件,不能只挑图片文件。 - 将备份的全部文件打包到应用Bundle中(比如新建
PreCachedImages目录存放)。 - 应用首次启动时,将Bundle中的备份文件完整复制到
Library/Caches/com.onevcat.Kingfisher.ImageCache.default路径下,确保覆盖空目录且文件权限为可读写(iOS缓存目录默认权限满足,但复制时不要修改权限)。
- 用Kingfisher下载完目标图片后,完整备份
补充说明:
- 在线重新获取图片时,Kingfisher会自动补全数据库中的元数据记录,所以此时能识别到已有缓存文件,表现为文件修改时间更新但内容不变——本质是更新了数据库记录,并未重新下载图片。
- 若使用自定义缓存名称,需对应修改备份和恢复的目录路径,默认缓存的目录后缀是
default。
内容的提问来源于stack exchange,提问作者Jeff Lockhart
相关产品推荐
相关产品推荐

