这是对索斯伯恩答案的补充,而不是替代品。
runModalForTypes:
已弃用,正确的替换是runModal
(或setAllowedFileTypes:
后跟runModal
,但在这种情况下,您将 nil 传递给类型)。
directory
也已弃用,正确的替换是directoryURL
. (如果您实际上必须返回NSString
路径而不是NSURL
,则只需返回[[gitDir directoryURL] path]
。)
但是,您正在做的是要求用户选择一个文件,然后返回该文件所在的目录,而您真正想要的是要求用户选择一个目录。为此,您需要调用setCanChooseFiles
toNO
和setCanChooseDirectories
to YES
,然后调用 URL 以获取用户选择的目录。
此外,您忽略了runModal
(或runModalForTypes:
)的结果。我确定编译器会警告您有关未使用的变量“ger”,您不应该只是忽略警告。如果用户取消面板,您将把它视为单击确定,然后选择她取消时碰巧所在的目录。
这是一个更好的实现,它将返回所选目录的 URL,如果用户取消(或以某种方式设法不选择任何内容),则返回 nil。同样,如果您需要一个NSString
,只需在 return 语句中添加一个“路径”调用:
-(NSURL *)get {
NSOpenPanel *panel = [NSOpenPanel openPanel];
[panel setAllowsMultipleSelection:NO];
[panel setCanChooseDirectories:YES];
[panel setCanChooseFiles:NO];
if ([panel runModal] != NSModalResponseOK) return nil;
return [[panel URLs] lastObject];
}