我有一个可以从图片生成 .pdf 文件的应用程序。如果我在拍照的同一会话中读取该文件,该文件会正确显示。
但是,如果我重新启动应用程序,该文件将无法打开。显然,当应用程序重新启动时,应用程序的代码没有任何变化,因此位置引用保持不变。
文件正在保存到此位置:
/var/mobile/Containers/Data/Application/E119DC03-347B-4C84-B07B-C607D40D26B9/Documents/Test_1_Mod.pdf
奇怪的是,如果我转到 Xcode 的“设备”部分,我可以在重新启动应用程序之前和之后看到 Documents 文件夹中的文件:
Edit:以下是我获取文件保存位置的方法:
NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *path = [arrayPaths objectAtIndex:0];
modified_pdfFileName = [path stringByAppendingPathComponent:modified_filename_pdf];
那么,我是否将文件保存在错误的位置?
在重新启动期间文件是否以某种方式移动?
对于这个问题有什么建议吗?
Thanks
您不应该为了持久性而存储原始文件路径(或者如果您这样做,请知道根目录可以在您身上移动)。更好的做法是仅存储路径的相对部分,并始终将其附加到当前有问题的“根”路径(特别是如果您可能像 iCloud 一样跨设备共享数据)。
尽管如此,走捷径还是很常见的,所以这里有一些快速而肮脏的代码来获取文件路径(假设位于 Documents 目录中,如果您使用不同的位置,您可以根据需要进行调整)并更新它到当前文档路径。
+ (NSString *)rebasePathToCurrentDocumentPath:(NSString *)currentFilePath
{
NSString *fileComponent = [currentFilePath lastPathComponent];
NSArray *currentDocumentDir = NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, YES);
NSString *currentDocumentPath = [currentDocumentDir objectAtIndex: 0];
NSString *rebasedFilePath = [currentDocumentPath stringByAppendingPathComponent:fileComponent];
return rebasedFilePath;
}
将其附加到 utils 类或以其他方式将其集成到您的流程中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)