Cocoa 沙盒 - 重新启动应用程序时重新打开文件

Cocoa sandbox - reopen files when restarting app

我有一个沙盒 Cocoa 应用程序。它有一个 window、多个标签 UI。我不使用 NSDocument,但它是一个可以编辑多个 "documents" 的应用程序。当应用程序关闭时,我保存打开文档的列表。当我重新启动应用程序时,我尝试在选项卡中重新打开它们。

当所有文档文件都在沙盒文档目录中时,这可以正常工作。但是,用户也可以在沙箱外打开文件。当应用程序重新启动时,由于沙箱权限无法打开这些文件,该文件不可读。我知道通常用户必须从打开的对话框中选择沙盒外文件。

文件在 "Recent Files" 列表中,可以用这种方式打开。

一定有办法做到这一点,因为大多数文本编辑器都是这样工作的。我是否缺少魔法权利或电话?

您需要安全范围的书签。

查看 Security-Scoped Bookmarks and Persistent Resource Access section of the Apple's App Sandbox Design Guide

Your app’s access to file-system locations outside of its container—as granted to your app by way of user intent, such as through Powerbox—does not automatically persist across app launches or system restarts. When your app reopens, you have to start over.
...
Starting in OS X v10.7.3, you can retain access to file-system resources by employing a security mechanism, known as security-scoped bookmarks, that preserves user intent.

我会在这里总结一下,但是上面 link 有你需要的一切。