NSFileManager 错误?
Posted
技术标签:
【中文标题】NSFileManager 错误?【英文标题】:NSFileManager Bug? 【发布时间】:2011-08-12 07:30:58 【问题描述】:你能在这行代码中找到一个错误吗?它返回零! 该应用已完全沙盒化,但已启用下载文件夹访问权限。
NSArray*array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"] error:NULL];
//array==nil: Why?
[编辑] 问题:我无法测试它。它发生在审查机器的来宾帐户上。编译的二进制文件是否有问题,或者您有任何解决此问题的提示吗?
【问题讨论】:
您是否能够写入文件并在审核团队运行后获取该文件?您可以使用 [NSString writeToFile:atomically:encoding:error:] 消息。我相应地在下面编辑了我的帖子NSHomeDirectory()
返回的值是多少?
@Wizz 我实现了一个方法,该方法返回有关应用程序的一些信息(在 Wizz 回答错误之后)并将其写入文件。现在我正在等待答案(发布在解决中心)。收到回复后会再写评论。
@Richard NSHomeDirectory() 在评论机器上返回“/Users/Guest”。 (完整路径:“/Users/Guest/Downloads”)。你能从中读出些什么吗?
@Richard 现在这很有趣。该方法在沙盒化时不会返回错误,而是返回完全错误的路径。在他们的机器上它返回:/Users/Guest/Library/Containers/[Bundle ID of App]/Data/Downloads 你能告诉我如何得到正确的,也许没有硬编码?
【参考方案1】:
尝试读取带有错误句柄的目录以检查会发生什么:
NSError *error = nil;
NSArray*array = [[NSFileManager defaultManager]
contentsOfDirectoryAtPath:
[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"]
error:&error];
if ( !array )
NSLog(@"ERROR: %@", [error description]);
这将为您提供更详细的说明出了什么问题。
要将此错误记录到文件 quick'n'dirty,请使用以下消息:
[[error description] writeToFile:@"strangeerrors.log"
atomically:NO encoding:NSUTF8StringEncoding error:nil];
【讨论】:
谢谢,但遗憾的是我无法记录此内容。问题是我的机器上没有发生这种情况。它发生在审查小组的一台机器上。你能给我一些建议吗?我还编辑了我的问题.. 你现在无能为力。如果您的代码忽略了系统提供的成功/失败和任何错误,那么这是您做出的有意识的选择,这就是后果。您的代码已损坏,因为它不会从可能失败的指令中报告容易获得的系统级错误。按照 Wizz 的建议修复您的代码(完成日志记录),发布更新,然后如果问题再次发生,请发送用户说明以向您发送其控制台日志的副本。【参考方案2】:您是否尝试过替换
[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"]
与
[@"~/Downloads" stringByExpandingTildeInPath]
?
【讨论】:
感谢您的帮助。可悲的是,我不知道这是问题所在还是 OfDirectoryAtPath:error: 方法的内容。所以我必须问我问过迈克的同样的问题。我应该尝试您的示例(我必须重新提交它),是否可以/正确解析沙箱中的符号链接,我应该尝试另一个目录枚举还是应该简单地联系 Apple DTS?或者您知道为什么该应用在我的 Mac 上的行为有所不同吗?【参考方案3】:在附加路径组件时不需要添加任何斜线。很简单:
[NSHomeDirectory() stringByAppendingPathComponent:@"Downloads"] ...
对我来说很好用!
【讨论】:
【参考方案4】:几乎可以肯定这不是真正的问题,但可以说将@"Downloads/"
作为路径组件而不是前导斜杠更有意义。在 Cocoa 看来,求 @"/Downloads/"
的组件会给你:
@"/"
@"Downloads"
这可能不是你想要的。
【讨论】:
感谢您的回答。你认为你的例子会有什么不同吗?我已经通过 [NSSearchForDirectoriesInDomains(NSDownloadDirectory,NSUserDomainMask,YES) objectAtIndex:0] 尝试了它并解析了符号链接,因为文档说它“不遍历符号链接”,但这也失败了。我应该尝试您的示例(我必须重新提交它),是否可以/正确解析沙箱中的符号链接,我应该尝试另一个目录枚举还是应该简单地联系 Apple DTS?或者您知道为什么该应用在我的 Mac 上的行为有所不同吗?以上是关于NSFileManager 错误?的主要内容,如果未能解决你的问题,请参考以下文章
NSFileManager 中的错误(实例方法是遍历符号链接)
使用 NSFileManager 检索多个值时收到“致命错误:在展开可选值时意外发现 nil”