NSFileManager Bug?

时间:2011-08-12 07:30:58

标签: cocoa macos sandbox nsfilemanager

您能在这行代码中找到错误吗?它返回零! 该应用程序已完全沙箱化,但启用了下载文件夹访问权限。

NSArray*array = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"] error:NULL];
        //array==nil: Why?

[编辑]问题:我无法测试它。它发生在审查机器的Guest帐户上。编译后的二进制文件是否有问题,或者您有任何提示如何解决此问题?

4 个答案:

答案 0 :(得分: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];

答案 1 :(得分:1)

您是否尝试过更换

[NSHomeDirectory() stringByAppendingPathComponent:@"/Downloads/"]

[@"~/Downloads" stringByExpandingTildeInPath]

答案 2 :(得分:1)

添加路径组件时不需要添加任何斜线。这很简单:

[NSHomeDirectory() stringByAppendingPathComponent:@"Downloads"] ...

对我来说很好!

答案 3 :(得分:0)

这里几乎肯定不是真正的问题,但可以说将@"Downloads/"作为路径组件而不是使用前导斜杠更有意义。在Cocoa看来,要求@"/Downloads/"的组件会给你:

@"/"
@"Downloads"

这可能不是你想要的。