访问iOS

时间:2015-10-04 18:03:43

标签: 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,其中包含:

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

NSSearchPathDirectoryNSSearchPathDomainMask有几种选择。

那么iOS上的expandTilde怎么样呢?

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

感谢。

1 个答案:

答案 0 :(得分:2)

使用NSApplicationSupportDirectory将是我的第一选择。

但请记住以下几点:

  1. 与“Documents”文件夹不同,默认情况下,“iOS应用程序支持”文件夹不存在于iOS应用程序沙箱中,因此您必须在尝试使用该文件夹之前创建该文件夹。
  2. “隐藏于用户”仅表示用户在正常情况下不会看到它。但任何有技术知识的人都可以轻松访问该文件。
  3. 您确实希望为YES参数传递expandTilde,以便在模拟器中运行应用时,您的应用会返回正确的路径。在真正的iOS设备上,它没什么区别。

    请勿使用stringByAppendingString:创建路径。使用stringByAppendingPathComponent:

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

    您可以使用NSURL直接NSFileManager

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