【问题标题】:Writing to a document's enclosing folder写入文档的封闭文件夹
【发布时间】:2018-02-08 00:31:11
【问题描述】:

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

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

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

我看到书签是一种选择,但它们不提供相同的功能。如果将项目文件移动到新目录,则继续写入旧目录是没有意义的,我必须向用户询问写入新目录的权限。我不觉得这个用户友好。绝对没有办法解决这个问题吗?

【问题讨论】:

  • 相关文档为here。我曾考虑将捆绑包用作文档(“项目”)文件,但捆绑包中的文件应该易于用户访问,因此捆绑包再次对用户不友好。
  • “解决这个问题”我什至不明白是什么问题。
  • 打开我的应用程序创建的文档文件时,我无权写入封闭目录。如果你打开一个.xcodeproj 文件,XCode 显然可以写入封闭目录。我想要那个功能,而不是向用户征求许可。
  • “如果你打开一个 .xcodeproj 文件,XCode 显然可以写入封闭目录。我想要那个功能......”我不知道你是怎么打开的。如果您说的是通过双击打开文件,您可以这样做。
  • .xcodeproj 文件的封闭目录包含带有源代码文件的子目录。 XCode 可以在不需要许可的情况下访问那些;您只需双击.xcodeproj 文件,XCode 允许您编辑与.xcodeproj 文件位于同一目录中的任何源文件。这种功能是我想要的应用程序的那种功能,但是沙盒应用程序仅有权写入用户指向的那些文件/目录,而不是驻留在同一目录中的任何文件/目录,所以它似乎是不可能。

标签: objective-c macos cocoa sandbox nsdocument


【解决方案1】:

如果项目文件被移动到一个新目录,那么继续写入旧目录是没有意义的,我必须询问用户是否允许写入新目录。我不觉得这个用户友好。绝对没有办法解决这个问题吗?

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-27
    • 1970-01-01
    • 2021-12-22
    • 2019-08-14
    • 2016-04-17
    • 2016-02-07
    • 2015-08-10
    • 2014-11-19
    相关资源
    最近更新 更多