美文网首页
iOS 开发中本地缓存路径变化

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

作者: 木马sun | 来源:发表于2017-05-19 17:57 被阅读18次

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

           //界面刷新 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 拼接成对应路径 获取到正确的数据

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

    相关文章

      网友评论

          本文标题:iOS 开发中本地缓存路径变化

          本文链接:https://www.haomeiwen.com/subject/ztlebttx.html