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

作者 : 开心源码 本文共1109个字,预计阅读时间需要3分钟 发布时间: 2022-05-12 共176人阅读
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. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 关于每次重新运行app,保存文件的沙盒路径就失效的问题

发表回复