检查IOS中Documents目录的子目录时出错

时间:2015-01-22 16:35:17

标签: ios nsfilemanager

我的应用需要创建Documents目录的子目录。下面的代码返回目录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;
}

1 个答案:

答案 0 :(得分:2)

您想使用path而不是absoluteString前者返回完整的网址绝对路径,例如" file:///..."而后者只返回文件路径。

NSString *docDirPath = [docDir path];

所以,因为你正在寻找一个带有路径" file:///...."的文件;这将永远不会存在,检查总是失败。当你去创建目录时,你用URL创建它,所以它可以工作。