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