iOS 开发中本地缓存路径变化

        最近项目中遇到需要保存上传失败的图片,通过汇总所有上传失败图片提供一个展示列表选择性重发的需求, 所以需要保存失败图片的本地路径以用来在 列表中 通过路径方式展示图片:

       //界面刷新 imagePath 对应图片路径  ----  imageView.image = UIImage.init(contentsOfFile: imagePath)

    在这里遇到问题,保存图片的本地路径在程序的当次运行中都能正常显示,但是当程序杀死,再重启后,发现  UIImage.init(contentsOfFile: imagePath)  方法无法获得 对应的图片,查看缓存又发现图片确实存在, 检测本地缓存路径发现 一旦 程序重启  上次缓存的路径都将不复存在,纠结半天后发现iOS 沙盒机制 路径存储对应的系统名称是会在每次重启后发生变化的,所以导致 上次存储的 绝对路径 失效, 下面贴出 具体代码:

缓存路径对应的系统沙盒方法:

//************缓存数据路径*******

    /// 沙盒Documents目录

    static let DocumentsURL = NSHomeDirectory() + "/Documents"

    /// 沙盒Library目录

    static let LibraryURL = NSHomeDirectory() + "/Library"

    /// 沙盒Caches目录

    static let CachesURL = NSHomeDirectory() + "/Library/Caches"


1: 错误的获得图片路径并存储的方式:

      let name = "\(loginMode.useruid)_\((NSDate().timeIntervalSince1970)).PNG" //文件名

      let imagePath = RequestURL.DocumentsURL + "/\(name)"          //文件路径 ------

        通过时间戳 和 用户ID 做图片名称 的唯一标识, 拼接 系统沙盒中的 Documents 目录下生成绝对路径 imagePath,   将  imagePath 作为字符串 保存在 本地,   下次程序重启后 取出   imagePath  ,发现无法找到对应数据


2: 修改后的获得图片路径并存储的方式:

因为系统的 沙盒目录 动态变化, 所以我们固定存储的只能是   let name = "\(loginMode.useruid)_\((NSDate().timeIntervalSince1970)).PNG" //文件名 ,  沙盒目录部分(Documents,Library,Library/Caches)需要每次 重新从系统中获取,  再与name 拼接成对应路径 获取到正确的数据

总而言之,不能通过绝对路径去获取本地缓存数据,相对路径才是正确选择

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 每次听陈医生的歌,都有一种不一样的感受,或者系歌词,或是节奏,又或者医生本身的声音,但不知不觉总会有不一样的泪点产...
    青衣向海阅读 398评论 0 1
  • 今天跳到第十五章读“阅读故事、戏剧与诗的一些建议”。为什么挑这一个部分读呢?因为这本书的前一个部分是谈读理论类书籍...
    YinNan阅读 374评论 0 1
  • 今天的随机图样是Strircles,一个新图样,只是画了官方解构的原图,并未做变化,利用暗线形成了骑士桥的效果,看...
    M有如果阅读 214评论 4 5
  • 斑驳的月影下,摇曳着儿时的梦呓。天空作画板,彩虹为颜料,用风做衣,以梦为马。那儿有喝不完的酒和讲不完的故...
    成龙大哥哥阅读 513评论 4 2
  • 那是一个很小很偏僻的小山村,镇上的大部分人辛辛苦苦的挣扎,只为了活下去。 她生在一个比较复杂重组家庭,有三个同父异...
    CheungShaw阅读 279评论 0 0