在基于文档的 Mac 应用程序中,如何获取无标题文档的临时文件夹?

Posted

技术标签:

【中文标题】在基于文档的 Mac 应用程序中,如何获取无标题文档的临时文件夹?【英文标题】:In document based mac app, how to get the temp folder for the untitled document? 【发布时间】:2017-04-25 10:47:07 【问题描述】:

所以如果在应用程序的委托中,我有代码

- (BOOL)applicationShouldOpenUntitledFile:(NSApplication *)sender

    return YES;

所以当应用程序启动时,它会创建一个没有标题的默认文档文件。

我的问题是:在用户保存文件之前(此时将选择一个新位置),有没有办法知道当时文件的路径? (应该在系统临时文件夹中)

注意:请不要问我为什么需要知道路径,这是一个非常古老的项目,出于历史原因,我需要它并且无法更改。

【问题讨论】:

autosavedContentsFileURL 怎么样?在文档中不难找到。 感谢您的 cmets,但不,我的应用程序没有选择自动保存。该属性始终为零。 未保存的文档没有路径。它在磁盘上不存在。也许旧项目确实将文档保存在某个地方,但我们不知道在哪里。 【参考方案1】:

您可以从 NSFileManager 获取未保存文档的文件夹。

NSURL *url = [[NSFileManager defaultManager] URLForDirectory:NSAutosavedInformationDirectory
                                                    inDomain:NSUserDomainMask
                                           appropriateForURL:nil
                                                      create:YES
                                                       error:&error];

您可以通过此方法获取的路径如下(如果应用为沙盒,则嵌套在容器中):

~/Library/Autosave Information/

即使您不启用基于文档的应用程序的 autosavesInPlace 功能,此文件夹也可能用于窗口恢复等。

但正如 Willeke 已经指出的,未保存的文档实际上没有路径。

【讨论】:

四年后:我的(非沙盒)应用程序在控制台中产生错误并导致 Gatekeeper 失败,因为它无权读取和写入 Autosave Information 文件夹。 autosavesInPlace 已关闭。已保存和未保存的文件都会发生。你会碰巧知道从哪里开始研究这个问题吗?

以上是关于在基于文档的 Mac 应用程序中,如何获取无标题文档的临时文件夹?的主要内容,如果未能解决你的问题,请参考以下文章

在基于文档的应用程序中打开无标题文件

如何在基于密度的聚类中获取属于其聚类的文档?

当基于场景的文档mac催化剂应用程序在应用程序重启时重新打开窗口时如何避免奇怪的行为?

在iOS中测距和监控时如何获取信标的MAC地址

如何获取文件路径?在基于文档的应用程序中加载文档

Core Data Mac OS X 基于文档的应用程序中的 NSArrayController 类与实体模式