2

我是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];

    }

}

4

1 回答 1

3

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

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

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

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];
于 2012-08-28T20:32:44.753 回答