2017-10-21 124 views
0

我想通过NSOpemPanel将一些文件复制到指定的文件夹。 源文件正在读取XML并显示在NSTable中列出。我想在没有NSOpenPanel的沙箱中复制文件

我可以通过copyItemAtPath复制文件。 但现在我的应用程序将转向沙箱,然后我无法通过copyItemAtURL复制文件。

如何以沙盒模式复制文件?

我被看了很多帖子。我认为安全范围书签可能是解决方案。 但是我不能从路径中的XML创建“安全范围书签”(路径已转换为NSURL就绪)。 我正在设置为sandbox.entitlements,但尚不清楚这个问题。

这有什么办法吗?

在macOS10.12和Xcode8.3.3

开发

感谢

+0

是什么“但是我不能创建‘安全范围的书签’从XML路径内(路径为皈依的NSURL准备)。”意思?看起来你完全理解安全范围书签是什么。你想要的东西不清楚几个奇怪的英语表达,没有意义。展示你的工作。 –

回答

2

如何复制在沙​​盒模式的文件吗?

目前尚不清楚你当前的代码是干什么的,但沙箱下的规则很简单:要读取或写入位于应用程序本身的容器(这是在库文件夹下隐藏起来)你的应用程序之外的文件必须:

  • 使用NSOpenPanel从用户获取文件路径的URL;或
  • 使用NSOpenPanel可以从用户获取该文件的其中一个祖先文件夹的URL。

第二个选项允许访问整个文件夹,包括任何子文件夹;即根文件夹中的整个文件/文件夹子树。

正如你想复制“一些文件”,这听起来像是要求用户对文件夹的权限是适当的。您可以将NSOpenPanel自定义为“请求许可”对话框。如果您正在请求特定的文件夹,您也可以在其包含的文件夹中打开对话框,并且仅启用特定的文件夹供用户选择。

NSOpenPanel获得文件夹的URL后,您可以为其创建安全范围书签并将其保存在应用的首选项或其他配置文件(存储在应用的容器中)中。这样做可以使您的应用程序在后续执行中重新获得对该文件夹的访问权限,而无需再次询问用户。

如果在调查此问题并编写一些代码后,您遇到问题,请提出一个新问题,显示您的代码并解释问题。有人会毫无疑问地帮助你进行下一步。

HTH