【发布时间】:2016-12-17 10:46:57
【问题描述】:
我正在创建一个 macOS 应用程序,该应用程序在其 Bundle 目录中附带一些 .zip 文件。
用户应该能够将这些文件从我的应用程序保存到自定义目录。
我找到了NSSavePanel,并认为这是正确的方法——这就是我目前所拥有的:
@IBAction func buttonSaveFiles(_ sender: Any) {
let savePanel = NSSavePanel()
let bundleFile = Bundle.main.resourcePath!.appending("/MyCustom.zip")
let targetPath = NSHomeDirectory()
savePanel.directoryURL = URL(fileURLWithPath: targetPath.appending("/Desktop"))
// Is appeding 'Desktop' a good solution in terms of localisation?
savePanel.message = "My custom message."
savePanel.nameFieldStringValue = "MyFile"
savePanel.showsHiddenFiles = false
savePanel.showsTagField = false
savePanel.canCreateDirectories = true
savePanel.allowsOtherFileTypes = false
savePanel.isExtensionHidden = true
savePanel.beginSheetModal(for: self.view.window!, completionHandler: {_ in })
}
我不知道如何将bundleFile“移交”给savePanel。
所以我的主要问题是:如何将文件从应用程序包保存/复制到自定义目录?
其他问题取决于NSSavePanel: 1) 好像默认没有本地化(我的Xcode方案设置为德语,但面板显示为英文),我必须自己自定义吗? 2) 有没有办法让面板默认展开?
【问题讨论】:
-
搜索 bundle 或 NSBundle 会有所帮助。
-
@ElTomato 我已经使用
Bundle来查找bundleFile 的路径(参见我上面的代码)。它对我描述的问题没有帮助。 -
哦,对不起……让我想想,我会回来找你的。
-
我会像 Eric 所说的那样使用 runModal。
标签: swift macos cocoa nsbundle nssavepanel