写入文档的封闭文件夹

Writing to a document's enclosing folder

当您打开一个 XCode 项目时,它可以自动写入相应 .xcodeproj 文件的封闭文件夹。

在沙盒应用程序中,您只能写入已打开的文件,或写入已使用 NSOpenPanel 打开的目录。

我想要实现的功能与 XCode 相同;我的应用程序制作了一个项目文件(一个非常类似于 .xcodeproj 文件的文档),该文件保存到用户选择的目录中,并在该目录中创建与该项目文件相关的其他文件。但是,如果在终止应用程序后重新打开文件,我最终会失去写入封闭目录的权限。

我看到书签是一个选项,但它们不提供相同的功能。如果项目文件被移动到一个新目录,继续写入旧目录是没有意义的,我必须征求用户的许可才能写入新目录。我不觉得这对用户友好。是不是完全没有办法解决这个问题?

If the project file is moved to a new directory it makes no sense to keep writing to the old directory, and I'd have to ask the user for permission to write to the new directory. I don't find this user-friendly. Is there absolutely no way to resolve this problem?

很遗憾,这是 Apple 的沙盒模型,您需要适应它。您描述的过程是处理您的情况的好方法 - 当您第一次创建项目文件时,要求用户 select 文件夹来存储它并将书签保存到该文件夹​​,当打开现有项目文件时检查您是否为其 parent 文件夹保存了书签,如果没有,则显示一个对话框,说明该文件已被移动,并询问用户是否允许使用新的 parent 文件夹并为其保留书签。

用户已经习惯了来自应用程序的这些对话框,沙箱已经存在了很长时间。您可能会发现保留一些已保存的书签并优化您的 collection 将改善您的用户体验。例如。请记住,文件夹的书签授予访问其中所有文件和文件夹的权限,以及这些文件夹中的 files/folders 等。这意味着如果用户通过将项目移动到子文件夹中进行重组,可能不需要您请求一个新书签,同样,当获得一个新书签时,您存储到新书签文件夹包含的文件夹中的任何现有书签都是多余的,可以从您的 collection 个已存储书签中删除。

不是您真正想要的答案,但希望对您有所帮助!