在iOS中访问本地存储的文件(对用户隐藏,在库下)



这是我用于在iOS上创建和访问重要配置文件的NSURL对象,具有以下功能:

  • 对用户
  • 隐藏
  • 不是用户生成的文件(存储与用户相关的配置)
  • 不是临时的或缓存的(不可能稍后用现有数据创建)
  • 必须备份到iCloud/iTunes

    [NSURL fileURLWithPath:[[NSSearchPathForDirectoriesInDomains(
                             NSLibraryDirectory,
                             NSUserDomainMask,
                             YES) objectAtIndex:0]
    stringByAppendingString:@"/important.txt"]];
    

根据FileSystemOverview (developer.apple.com)中的建议,我将此文件存储在Library下。也许更好的办法是把它保存在Library/Application Support下。

使用NSSearchPathForDirectoriesInDomains,它需要:

  • enum NSSearchPathDirectory

    • NSApplicationDirectory
    • NSDeveloperApplicationDirectory
    • NSLibraryDirectory
    • NSDeveloperDirectory
    • NSApplicationSupportDirectory
  • enum NSSearchPathDomainMask

    • NSUserDomainMask
    • NSLocalDomainMask
    • NSSystemDomainMask
  • BOOL expandTilde


这是存储这种文件的正确方法吗?

NSSearchPathDirectoryNSSearchPathDomainMask有两个替代方案。

还有expandTilde,在iOS上是必要的吗?

是否有更好的方法,而不是使用objectAtIndex创建NSString路径并附加文件名,然后将其转换为NSURL ?

谢谢。

使用NSApplicationSupportDirectory将是我的首选。

但请记住以下几点:

    与"Documents"文件夹不同,"Library/Application Support"文件夹默认不存在于iOS应用程序沙盒中,所以你必须在尝试使用它之前创建该文件夹。
  1. "Hidden from the user"仅意味着用户在正常情况下不会看到它。但是该文件很容易被任何具有任何技术知识的人访问。

你想传递YESexpandTilde参数,所以你的应用程序返回一个正确的路径,当你在模拟器中运行应用程序。在真正的iOS设备上,这没什么区别。

不使用stringByAppendingString:创建路径。使用stringByAppendingPathComponent: .

NSString *appSupportPath = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) firstObject];
NSString *filePath = [appSupportPath stringByAppendingPathComponent:@"important.txt"];
NSURL *fileURL = [NSURL fileURLWithPath:filePath];

您可以使用NSFileManager:

直接获得NSURL
NSURL *appSupportURL = [[[NSFileManager defaultManager] URLsForDirectory:NSApplicationSupportDirectory inDomains:NSUserDomainMask] firstObject];
NSURL *fileURL = [appSupportURL URLByAppendingPathComponent:@"important.txt"];

最新更新