NSOpenPanel的setDirectoryURL不起作用

时间:2011-10-19 10:32:01

标签: objective-c macos cocoa

我正在尝试为NSOpenPanel使用新方法并设置其初始目录。问题是它只在第一次工作,然后它只是“记住”最后选择的文件夹,我不想要。我必须使用折旧的runModalForDirectory:file:使它工作。它不太理想,因为它被弃用了10.6,但幸运的是它仍适用于Lion。

我的代码是:

NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setAllowedFileTypes:[NSArray arrayWithObjects: @"jpg",@"JPG",@"png", nil]];
panel.canChooseDirectories = YES;
panel.allowsMultipleSelection = YES;
handler = ^(NSInteger result) {stuff};
[panel setDirectoryURL:[NSURL URLWithString:@"/Library/Desktop Pictures"]];

2 个答案:

答案 0 :(得分:7)

有几件事需要研究:

  1. ~/Pictures不是有效的网址。 file:///Users/user/Pictures是。 -[NSURL URLWithString:]需要有效的网址。您可能希望使用-[NSURL fileURLWithPath:]代替。它会将/Users/user/Pictures变为file:///Users/user/Pictures
  2. Tildes不会自动展开,因此您希望使用[@"~/Pictures stringByExpandingTildeInPath]来获取实际的文件路径。
  3. 放在一起,将最后一行改为:

    [panel setDirectoryURL:[NSURL fileURLWithPath:[@"~/Pictures" stringByExpandingTildeInPath]]];
    

    我认为这应该有用。

答案 1 :(得分:3)

Lion中的面板需要一个URL:file:// localhost / Library / Desktop Pictures,但您的URL以实际路径开头。 请改用[NSURL fileURLWithPath:@"/Library/Desktop Pictures"]

快乐的编码!