使用 NSOpenPanel 保存到沙盒应用程序中的目录不起作用,但 drag/drop 可以
Saving to directory in sandboxed app using NSOpenPanel doesn't work, but drag/drop does
我正在开发沙盒 OS X 应用程序,其中图像被保存到用户选择的目录中。用户可以通过两种方式选择输出目录:使用 NSOpenPanel 选择目录,以及将目录拖放到应用程序上。
当我使用 drag/drop 方法时,一切正常,我的文件保存没有问题。
但是,如果我使用 NSOpenPanel 选择目录,我会收到错误 513:
Error 513: "You don't have permission to save the file 'x.jpg' in the folder 'y'."
NSOpenPanel 和 drag/drop 代码都将它们选择的 URL 保存在同一个地方并以相同的方式处理它。什么可以解释这种差异?是否必须以特定方式设置 NSOpenPanel 以授予对目录的 read/write 权限?
郑重声明,我在过去一年使用我的应用程序时从未注意到这个问题,所以它可能是最近对 Cocoa 的更改——但我对此不是 100% 确定。
不出所料,我好像用错了 NSOpenPanel。
正在存储 URL 来自 panel(_ sender: AnyObject, validate url: URL)
中的委托调用。应该从 begin(completionHandler handler: (Int) -> Swift.Void)
.
中的回调调用面板的 URL 属性
在我的例子中,我错误地将我的个人文件写入通过将每个文件名连接到 URL:
创建的路径
panel.directoryURL
将其更改为:
panel.urls.first
...成功了。希望这可以避免一些麻烦。
我正在开发沙盒 OS X 应用程序,其中图像被保存到用户选择的目录中。用户可以通过两种方式选择输出目录:使用 NSOpenPanel 选择目录,以及将目录拖放到应用程序上。
当我使用 drag/drop 方法时,一切正常,我的文件保存没有问题。
但是,如果我使用 NSOpenPanel 选择目录,我会收到错误 513:
Error 513: "You don't have permission to save the file 'x.jpg' in the folder 'y'."
NSOpenPanel 和 drag/drop 代码都将它们选择的 URL 保存在同一个地方并以相同的方式处理它。什么可以解释这种差异?是否必须以特定方式设置 NSOpenPanel 以授予对目录的 read/write 权限?
郑重声明,我在过去一年使用我的应用程序时从未注意到这个问题,所以它可能是最近对 Cocoa 的更改——但我对此不是 100% 确定。
不出所料,我好像用错了 NSOpenPanel。
正在存储 URL 来自 panel(_ sender: AnyObject, validate url: URL)
中的委托调用。应该从 begin(completionHandler handler: (Int) -> Swift.Void)
.
在我的例子中,我错误地将我的个人文件写入通过将每个文件名连接到 URL:
创建的路径panel.directoryURL
将其更改为:
panel.urls.first
...成功了。希望这可以避免一些麻烦。