写入文档的封闭文件夹

时间:2017-08-30 10:25:15

标签: objective-c macos cocoa sandbox nsdocument

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

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

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

我看到书签是一个选项,但它们不提供相同的功能。如果将项目文件移动到新目录,那么继续写入旧目录是没有意义的,我必须要求用户写入新目录的权限。我发现这个用户友好。有没有办法解决这个问题?

1 个答案:

答案 0 :(得分:2)

  

如果将项目文件移动到新目录,那么继续写入旧目录是没有意义的,我必须要求用户写入新目录的权限。我发现这个用户友好。有没有办法解决这个问题?

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

用户习惯使用应用程序中的这些对话框,沙盒已经存在很长时间了。您可能会发现保留一些已保存的书签并优化您的收藏将改善您的用户体验。例如。请记住,文件夹的书签允许访问其中的所有文件和文件夹,以及这些文件夹中的文件/文件夹等。这意味着如果用户通过将项目移动到子文件夹进行重新组织可能不需要您要求新的书签,类似地,当获取新书签时,您存储到新书签文件夹所包含的文件夹中的任何现有书签都是多余的,可以从您存储的书签集合中删除。

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