重新启动应用程序后找不到保存的文件(在设备中)

时间:2015-01-08 19:52:43

标签: ios

我有一个应用程序,可以从图片中生成.pdf文件。如果我在拍摄照片的同一会话中读取文件,则文件会正确显示。

但是,如果我重新启动应用程序,则文件无法打开。显然,当应用程序重新启动时,应用程序的代码没有任何变化,因此位置引用保持不变。

文件正保存到此位置:

/var/mobile/Containers/Data/Application/E119DC03-347B-4C84-B07B-C607D40D26B9/Documents/Test_1_Mod.pdf

奇怪的是,如果我转到Xcode的“设备”部分,我可以在重新启动应用程序之前和之后看到Documents文件夹中的文件:

enter image description here

修改:以下是我获取保存文件位置的方法:

NSArray *arrayPaths =
NSSearchPathForDirectoriesInDomains(
                                    NSDocumentDirectory,
                                    NSUserDomainMask,
                                    YES);
NSString *path = [arrayPaths objectAtIndex:0];
modified_pdfFileName = [path stringByAppendingPathComponent:modified_filename_pdf];

那么,我是否将文件保存在错误的位置?

在重启期间,文件会以某种方式移动吗?

对此问题的任何建议?

由于

1 个答案:

答案 0 :(得分:17)

您不应该存储原始文件路径以保持持久性(或者,如果您这样做,请知道根可以移动您)。更好的做法是仅存储路径的相对部分并始终将其附加到当前的" root"有问题的路径(特别是如果你可能像iCloud一样跨设备共享数据)。

尽管如此,通常采用快捷方式,所以这里有一些快速而肮脏的代码来获取文件路径(假设在文档目录中,如果你有'重新使用不同的位置)并将其更新到当前的文档路径。

+ (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类或以其他方式将其集成到您的流程中。