我有一个应用程序,从图片生成.pdf文件.如果我在拍摄照片的同一会话中读取文件,则文件会正确显示.
但是,如果我重新启动应用程序,则文件无法打开.显然,当应用程序重新启动时,应用程序的代码没有任何变化,因此位置引用保持不变.
该文件正在保存到此位置:
/var/mobile/Containers/Data/Application/E119DC03-347B-4C84-B07B-C607D40D26B9/Documents/Test_1_Mod.pdf
Run Code Online (Sandbox Code Playgroud)
奇怪的是,如果我转到Xcode的"设备"部分,我可以在重新启动应用程序之前和之后看到Documents文件夹中的文件:

编辑:这是我如何获取保存文件的位置:
NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory,
NSUserDomainMask,
YES);
NSString *path = [arrayPaths objectAtIndex:0];
modified_pdfFileName = [path stringByAppendingPathComponent:modified_filename_pdf];
Run Code Online (Sandbox Code Playgroud)
那么,我是否将文件保存在错误的位置?
文件是否在重启期间以某种方式移动?
对此问题的任何建议?
谢谢
Bra*_*ton 18
您不应存储用于持久性的原始文件路径(或者,如果您这样做,请知道根可以移动您).更好的做法是仅存储路径的相对部分并始终将其附加到当前的"根"路径(特别是如果您可能像使用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;
}
Run Code Online (Sandbox Code Playgroud)
将其附加到utils类或以其他方式将其集成到您的流程中.
| 归档时间: |
|
| 查看次数: |
1958 次 |
| 最近记录: |