使用NSOpenpanel和NSfilemanager查找目录的内容

时间:2012-08-28 20:08:26

标签: objective-c

我是Objective-c的新手,请原谅我缺乏知识。我在这里有一段代码,似乎无法正常工作。我想要做的是在点击按钮时显示目录选择面板。一旦用户选择了一个目录,我想在目录中创建所有内容的数组。最终我想使用这个数组来获得一个子目录和文件列表(用户选择的目录中的所有内容),以便复制到另一个位置。

我有一个警告说没有找到实例方法'-contentsofdirectoryaturl:options:error'(返回类型默认为id)。我不确定这意味着什么或如何解决它,我怀疑这是我的问题。提供的任何建议都会很棒。谢谢!

- (IBAction)selectfiles:(id)sender {

NSOpenPanel *openPanel = [NSOpenPanel openPanel];

[openPanel setCanChooseDirectories:YES];
[openPanel setCanChooseFiles:NO];
[openPanel setAllowsMultipleSelection:NO];

if ( [openPanel runModal] == NSOKButton ) {

    NSArray *accountPath = [openPanel URLs];
    NSLog (@"%@", accountPath);

    NSFileManager *filemgr;
    filemgr = [NSFileManager defaultManager];

    NSArray *contents;
    contents = [filemgr contentsOfDirectoryAtURL:accountPath options:(NSDirectoryEnumerationSkipsHiddenFiles) error:nil];

    }

}

1 个答案:

答案 0 :(得分:3)

contentsOfDirectoryAtURL:有一个额外的参数includingPropertiesForKeys:,您已将其省略。这就是编译器警告你的原因。该参数是您要预取的属性列表。在最简单的情况下,您可以指定一个空数组。

另一个错误是,[openPanel URLs]会返回网址的数组,即使只选择了一个项目。

所以你的代码应该是这样的:

NSURL *accountPath = [[openPanel URLs] objectAtIndex:0];
NSLog (@"%@", accountPath);

NSFileManager *filemgr;
filemgr = [NSFileManager defaultManager];

NSArray *contents;
contents = [filemgr contentsOfDirectoryAtURL:accountPath
    includingPropertiesForKeys:[NSArray array]
    options:(NSDirectoryEnumerationSkipsHiddenFiles)
    error:nil];