代码之家  ›  专栏  ›  技术社区  ›  Archagon

使用NSOpenPanel保存到沙盒应用程序中的目录不起作用,但拖放可以

  •  3
  • Archagon  · 技术社区  · 8 年前

    我正在开发一个沙盒OSX应用程序,在该应用程序中,图像会保存到用户选择的目录中。用户有两种选择输出目录的方法:使用NSOpenPanel选择目录,然后将目录拖放到应用程序上。

    当我使用拖放方法时,一切都很好,我的文件保存起来没有问题。

    但是,如果我使用NSOpenPanel选择目录,我会得到错误513:

    错误513:“您无权将文件'x.jpg'保存在文件夹'y'中。”

    NSOpenPanel和拖放代码都将其选定的URL保持在相同的位置,并以相同的方式进行处理。什么可以解释这种差异?NSOpenPanel是否必须以特定方式设置才能授予目录的读/写权限?

    记录在案,我在过去一年使用我的应用程序时从未注意到这个问题,所以这可能是最近对Cocoa的一次更改,但我不能百分之百肯定这一点。

    2 回复  |  直到 6 年前
        1
  •  2
  •   Archagon    8 年前

    不出所料,看起来我用错了NSOpenPanel。

    正在中存储委托调用的URL panel(_ sender: AnyObject, validate url: URL) 。应该从中的回调调用面板的URL属性 begin(completionHandler handler: (Int) -> Swift.Void) .

        2
  •  0
  •   Nicolas Miari    5 年前

    在我的例子中,我错误地将各个文件写入了通过将每个文件名连接到URL而创建的路径:

    panel.directoryURL
    

    将其更改为:

    panel.urls.first
    

    …它奏效了。希望这能省去一些麻烦。