0

用户必须保存文件,但我只希望他们将文件保存在一个文件夹中。这该怎么做?

我已经尝试过实现委托并在目录不同时强制设置它。这不起作用。保存面板打开时,用户仍然可以选择其他文件夹

extension Project:  NSOpenSavePanelDelegate  {
    func panel(_ sender: Any, didChangeToDirectoryURL url: URL?) {
        if url != testsFolder {
            (sender as! NSSavePanel).directoryURL = testsFolder
        }
    }

    func panel(_ sender: Any, validate url: URL) throws {
        if url.deletingLastPathComponent() != testsFolder {
            (sender as! NSSavePanel).directoryURL = testsFolder
            throw ProjectError.scriptInitiliation
        }
    }
}
4

1 回答 1

0

问题是,该文件夹已经在应用程序中修复。

这是从用户那里获得访问此文件夹的权限的时候了。使用打开(不保存)对话框让用户确认文件夹的选择。将此视为“确认访问对话框”,您可以:

  • 使用将“打开”按钮的标签更改为其他内容prompt
  • 设置titlemessage对话框显然是确认对话框
  • 将初始文件夹设置为directoryURL您要确认的文件夹的父文件夹(注意:对话框启动directoryURL 的任何更改都将被忽略,因此您无法使用委托将对话框锁定到该文件夹didChangeToDirectoryURL​​ - 在早期的沙箱中您可以,但 Apple 现在已经停止了)
  • 设置delegate并使用其shouldEnablevalidate回调以确保只能选择您希望确认的文件夹或取消对话框。
  • canCreateDirectories&设置canChooseFilesfalse_canChooseDirectoriestrue

用户确认文件夹访问权限后,在您的应用程序的首选项中保存一个安全范围的书签。您的应用现在可以随时重新获得对该文件夹的访问权限。使用该权限,您可以在该文件夹中创建和打开文件和文件夹,而无需再次使用NSOpenPanelNSSavePanel

从这一点开始,为了限制用户保存在该文件夹中,建立您自己的对话框以仅询问文件名,省略路径部分并绕过NSSavePanel- 您可以模拟标准对话框或从头开始设计自己的对话框。

高温高压

于 2019-10-25T18:38:45.053 回答