在IOS中检查Documents目录的子目录时出错
Posted
技术标签:
【中文标题】在IOS中检查Documents目录的子目录时出错【英文标题】:Error checking for subdirectory of Documents directory in IOS 【发布时间】:2015-01-22 16:35:17 【问题描述】:我的应用需要创建 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;
【问题讨论】:
对于初学者NSLog()
docDirPath
并将其添加到问题中。同时提供错误信息。
错误测试纯粹是为了测试,不是生产代码。 docDirPath 用作 fileExistsAtPath: 的参数。代码生成cocoa错误4.
我已经解释了代码试图做什么。我只是要求有人解释为什么 fileExistsAtPath: 在相关目录已经存在时返回 false 。有 NSFileManager 经验的人可能能够做到这一点。还需要什么其他信息?
我知道我的代码已损坏,这就是我发布求助请求的原因。这可能是我误解的适用于目录的规则。我不知道要提供什么额外信息。也许您可能会提出一些对您有帮助的建议。
看第一条评论。
【参考方案1】:
你想使用path
而不是absoluteString
前者返回完整的url绝对路径,类似于“file:///...”,而后者只返回文件路径。
NSString *docDirPath = [docDir path];
因此,由于您正在寻找一个永远不会存在的路径为“file:///....”的文件,因此检查总是失败。当你去创建目录时,你使用 URL 创建它,所以它可以工作。
【讨论】:
遗憾的是 OP 不会提供docDir
和 docDirPath
的 NSLog(),他可能自己想出来了..
谢谢大卫。如果 Zaph 已经知道答案,那么他说出来会很有帮助。我已经看过数据并错过了显而易见的事情。它有时会发生。以上是关于在IOS中检查Documents目录的子目录时出错的主要内容,如果未能解决你的问题,请参考以下文章
从 Documents 目录在 UIWebview 中打开时,ios-css 和 js 无法在 html 文件中链接