Swift NSSavePannel-如何限制用户只保存一个一组目录?
用户必须保存文件,但我只希望他们将文件保存在一个文件夹中。如何做到这一点 我已经尝试过实现委托,并在目录不同时强制设置回目录。这是行不通的。当“保存”面板打开时,用户仍可以选择其他文件夹Swift NSSavePannel-如何限制用户只保存一个一组目录?,swift,nsopenpanel,nssavepanel,Swift,Nsopenpanel,Nssavepanel,用户必须保存文件,但我只希望他们将文件保存在一个文件夹中。如何做到这一点 我已经尝试过实现委托,并在目录不同时强制设置回目录。这是行不通的。当“保存”面板打开时,用户仍可以选择其他文件夹 extension Project: NSOpenSavePanelDelegate { func panel(_ sender: Any, didChangeToDirectoryURL url: URL?) { if url != testsFolder {
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
}
}
}
问题是,该文件夹已在应用程序中修复
这是获得用户访问此文件夹的权限的时间。使用打开(不保存)对话框让用户确认文件夹的选择。将此视为“确认访问对话框”,您可以:
- 使用
提示符
- 设置
和标题
,使对话框明显为确认对话框消息
- 使用
将初始文件夹设置为要确认的文件夹的父文件夹(注意:对话框启动后对directoryURL
的任何更改都将被忽略,因此您无法使用委托directoryURL
将对话框锁定到该文件夹–在早期的沙盒中,您可以,但苹果现在已经停止了该操作)didChangeToDirectoryURL
- 设置
,并使用其委托
和shouldEnable
回调,以确保只能选择您希望确认的文件夹或取消对话框validate
- 将
和canCreateDirectories
设置为canChooseFiles
,false
设置为canchooseditories
true
NSOpenPanel
或NSSavePanel
从这一点开始,要限制用户保存在该文件夹中,请建立自己的对话框,只要求文件名,省略路径部分,并绕过
NSSavePanel
——您可以模拟标准对话框或从头开始设计自己的对话框
HTH请描述“不起作用”。应用程序是否崩溃?是否调用了委托方法?它不会崩溃。但当“保存”面板打开时,用户仍然可以选择其他文件夹。请用户打开请求的文件夹一次,添加一个安全范围的书签,然后只问用户文件名。@vadian。。这更像是一种解决方法。问题是,该文件夹是一个文件夹lready fix已在应用程序中修复。要求用户打开可能是一种不好的体验。我只想打开SavePannel,以便用户可以输入文件名,以便保存文件。如果用户输入一个已经存在的文件,NSSavePanel已经处理了此问题。我只是不希望用户更改文件夹,因为它已修复。(除非我误解了你说的话?)如果应用程序是沙盒式的——看起来是这样的——有两种情况:1)将文件保存在应用程序容器内,只要求用户输入文件名。2)对于容器外的任何(固定)文件夹,你需要要求用户打开文件夹一次,以创建安全范围的书签。这