关于每次重新运行app,保存文件的沙盒路径就失效的问题

1.发现问题

简单举个例子,保存一个UIImage进沙盒/Documents目录下

UIImage * wtImg = ...;
NSString *path_header = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSData *imgData=UIImagePNGRepresentation(wtImg);
NSString *path_wtImg = [path_header stringByAppendingString:@"/wtImg.png"];
[imgData writeToFile:path_wtImg atomically:YES];

然后顺手把这个图片的完整路径path_wtImg给保存起来了,方便其他地方读取使用.
DuangDuangDuang~~~~
问题就出现了,本次app不杀死没啥事,图片顺利读取,可一旦app进程杀死了,再读取就读取不到了.

2.查明原因

根据地址去寻址找东西,东西不见了,那必然是地址和东西没对应上,先去找下地址对应文件是不是还在.果然.按照原完整路径去寻址,文件夹不存在,有问题看log,通过打印发现两次运行app的沙盒路径不一致,不一致的地方在Application文件夹下

/Application/22F01795-4B87-4592-B5EF-E084BEC8256B/Documents/
/Application/A529F060-40BD-4A0B-9E59-04A83321BEF7/Documents/

那就是系统的问题咯,翻看文档发现在iOS8前,路径不会变,从iOS8,Xcode6之后, 每次运行后沙盒的路径都会变化,生成新的一个路径,原路径文件夹内容被替换至新路径下,原文件夹对应就找不到了,应该是为了安全每次运行都给/Application下文件夹重名

3.解决问题

知道这个就好办了,保存文件时值存文件名好了,至于读取时候完整地址重新拼接

NSString *path_header = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
NSString *path_wtImg = [path_header stringByAppendingString:@"/wtImg.png"];
UIImage * partImg = [UIImage imageWithContentsOfFile:path_wtImg];

搞定. 欢迎大家指正

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

推荐阅读更多精彩内容

  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,038评论 3 119
  • 直接统一用brew 进行安装即可 要注意的点 1、安装完mysql后,要在php.ini下进行mysql.sock...
    c8933d98debe阅读 2,286评论 0 0
  • 在微博上看看漫画家吉村拓也教大家画树…自己也来学一学,像写作业一样老老实实的一笔一点的画: 我想这世界上最不孤单的...
    超级粒粒阅读 4,369评论 8 10
  • 概述 自从docker容器出现以来,容器的网络通信就一直是大家关注的焦点,也是生产环境的迫切需求。而容器的网络通信...
    糙老爷们儿吃什么樱桃阅读 8,992评论 1 5
  • “看见烂尾楼突然想到了蔡骏的《偷窥120天》”,坐在车上的我突然说道。 “什么” “悬疑小说,东野圭吾的书你看过吗...
    与谁同阅读 3,555评论 13 13