swift 设置NSOpenPanel的初始目录

smdnsysy  于 2023-02-28  发布在  Swift
关注(0)|答案(2)|浏览(138)

我试图让用户从包含日志文件的文件夹中选择一个文件。因此我想显示一个NSOpenDialog,显示该文件夹的内容。我使用的是Swift,因此10.9+
我在这里看到了许多关于这个主题的线索,但是尽管尝试了转换成Swift的相同代码,它还是总是返回到Documents文件夹。

let fd: NSOpenPanel = NSOpenPanel()
    fd.directoryURL = NSURL.fileURLWithPath("~/LauncherLogs", isDirectory: true)
    fd.canChooseDirectories = false
    fd.canChooseFiles = true
    fd.allowedFileTypes = ["log"]
    fd.runModal()

有问题的文件夹确实存在,复制并粘贴路径到Finder中的“转到文件夹...”就在那里。有什么想法吗?

hc8w905p

hc8w905p1#

您需要扩展tilde,NSString有一个手动方法来实现此操作,因此:

let launcherLogPathWithTilde = "~/LauncherLogs" as NSString
let expandedLauncherLogPath = launcherLogPathWithTilde.stringByExpandingTildeInPath
fd.directoryURL = NSURL.fileURLWithPath(expandedLauncherLogPath, isDirectory: true)

+1赞成马丁提到它。

b09cbbtk

b09cbbtk2#

approved answer的2022版本:

  • .stringByExpandingTildeInPath.expandingTildeInPath
  • .file.fileURL
let dialog = NSOpenPanel();
let launcherLogPathWithTilde = "~/LauncherLogs" as NSString
let expandedLauncherLogPath = launcherLogPathWithTilde.expandingTildeInPath
dialog.directoryURL = NSURL.fileURL(withPath: expandedLauncherLogPath, isDirectory: true)

相关问题