2014-04-03 25 views
-1

我的程序处理一个目录中的文件,然后在这个目录下创建另一个文件。如果你没有打开沙盒,结果是正确的,如果我打开沙盒,那么创建一个文件将失败。但我见过有些人可以做到。谁能告诉我该怎么做?我想问一下沙箱。不能创建文件?

+0

https://developer.apple.com/library/mac/documentation/security/conceptual/AppSandboxDesignGuide/AppSandboxInDepth/AppSandboxInDepth.html – VenoMKO

回答

0

沙盒的核心目的是阻止应用程序在未经用户许可的情况下读取或写入文件。这里有三种获得写入文件权限的方法:

A)如果你的应用程序被设计为处理目录中的所有文件,读入现有文件并写出新文件,然后使用NSOpenPanel让用户选择目录。这将授予您的应用程序读/写/创建到该目录。用户将看到一个询问目录的对话框。

B)如果正在处理由用户选择的文件,然后,以产生具有相同名称的文件,在相同目录,但具有不同文件扩展名(例如,其将应用文件从一种格式转换为另一种格式),那么您可以使用沙盒的功能相关项目。这要求您在应用程序中列出两个文件扩展名Info.plist,向这些Info.plist条目添加一个布尔型NSIsRelatedItemType标志,并使用NSFileCoordinator & NSFilePresenter类 - 基于标准文档的应用程序会自动执行这些类。用户将看到一个询问源文件的对话框。

C)你是在处理文件,并用不同的或在不同目录生成另一个。您需要使用NSOpenPanel来访问该文件并使用NSSavePanel来获得写入结果的权限。用户将看到两个对话框。

Apple在App Sandbox Design Guide提供了一个概述。

HTH

+0

谢谢答复,你给开需要三种方法保存对话框,程序不符合,我想要的效果是: 在查找器中选择文件,然后弹出上下文菜单。在菜单中选择我的应用程序。然后创建一个新文件。 例如,在查找器中选择一个rar文件,右键弹出上下文菜单选择提取到当前目录。 像这样https://itunes.apple.com/cn/app/mini-unrar/id641146824?l=en&mt=12 – user3494251