【问题标题】:What is the hexadecimal part in the Documents folder's path?Documents 文件夹路径中的十六进制部分是什么?
【发布时间】:2014-10-10 18:24:54
【问题描述】:

我的应用程序的Documents 文件夹中有一个文件。当应用程序终止时,我将文件的 URL 保存在 AppDelegate 的 applicationWillTerminate 方法中:

// archiver init code
[archiver encodeObject:file.URL forKey:kFileURL];
// finish encoding and write data to file system

但在下次启动应用程序时尝试恢复文件时,文件管理器无法找到该文件:调用后

NSURL *fileURL = [unarchiver decodeObjectForKey:kFileURL];
NSString *filePath = fileURL.path;

方法

[[NSFileManager defaultManager] fileExists:filePath];

返回NO

我试图找出原因,发现Documents 文件夹的路径会随着每次应用启动而改变。改变的部分是中间的十六进制文件夹。这里有两个例子:

/private/var/mobile/Applications/04083A4A-87AC-4E3C-8BA1-F002B97AE304/Documents/...
/private/var/mobile/Applications/65D136BA-42C3-887A-B947-7FE396978153/Documents/...

我一直认为十六进制部分是每个应用程序独有的某种 ID。但随着它的变化:这个数字到底是多少? 以及如何在终止并重新启动我的应用程序后重新定位我的文件?

【问题讨论】:

    标签: ios objective-c nsfilemanager


    【解决方案1】:

    您应该只获取文档文件夹的目录,然后加载您的文件。

    + (NSString *)documentDataPath
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        if ([paths count] == 0) {
            return nil;
        }
        NSString *directory = [paths objectAtIndex:0];
        if (directory == nil) {
            NSLog(@"NSDocumentDirectory not found!");
        }
        return directory;
    }
    

    【讨论】:

    • 在阅读了您的简单回答后,我什至问了这个问题,我真的很尴尬。当然,当我可以使用相对路径时,我不应该使用绝对路径来保存和读取文件。我什至在我的应用程序中做过几次 - 我只是不记得了。感谢您为我指明正确的方向!即使它没有回答原始问题,我也会将其标记为正确答案:我仍然很好奇十六进制路径组件代表什么以及为什么它会从应用启动到应用启动发生变化。
    • 对于以后可能遇到同样问题的人:保存网址最好使用NSURL的书签功能。您可以在 Apple 的 File System Programming Guide 中了解更多信息。
    猜你喜欢
    • 2019-08-22
    • 2013-06-17
    • 1970-01-01
    • 2020-06-21
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多