检查 IOS 中文档目录的子目录时出错

Error checking for subdirectory of Documents directory in IOS

我的应用程序需要创建 Documents 目录的子目录。 returns 目录 URL 下面的代码。第一次通过它创建目录,但下次失败,因为 fileExistsAtPath: 声称目录仍然不存在。我知道它存在,因为我已经将捆绑包设置为使文件在 iTunes 中可见,并且我可以在 iTunes 中看到它。知道我做错了什么吗?

- (NSURL *)applicationDocumentsDirectory
{
    return [[[NSFileManager defaultManager]   URLsForDirectory:NSDocumentDirectory inDomains:NSUserDomainMask] lastObject];
}

- (NSURL *)applicationSubDirectory
{
    NSFileManager *manager = [NSFileManager defaultManager];
    NSURL *docDir = [self applicationDocumentsDirectory];
    docDir = [docDir URLByAppendingPathComponent:@"Sub" isDirectory:YES];
    NSString *docDirPath = [docDir absoluteString];
    BOOL isFolder = YES;

    if(!([manager fileExistsAtPath:docDirPath isDirectory:&isFolder] && isFolder))    {
        NSError *error = nil;
        BOOL ret = [manager createDirectoryAtURL:docDir withIntermediateDirectories:NO attributes:nil error:&error];
        if(!ret) {
            NSLog(@"ERROR app support: %@", error);
            abort();
        }
    }
    return docDir;
}

您想使用 path 而不是 absoluteString 前者 returns 完整 url 绝对路径,类似于 "file:///..." 而后者仅 returns 文件路径。

NSString *docDirPath = [docDir path];

因此,由于您要查找的文件的路径 "file:///...." 永远不会存在,因此检查总是失败。当你去创建目录时,你用URL创建它,所以它有效。