我的应用需要创建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;
}
答案 0 :(得分:2)
您想使用path
而不是absoluteString
前者返回完整的网址绝对路径,例如" file:///..."而后者只返回文件路径。
NSString *docDirPath = [docDir path];
所以,因为你正在寻找一个带有路径" file:///...."的文件;这将永远不会存在,检查总是失败。当你去创建目录时,你用URL创建它,所以它可以工作。