在没有任何窗口的情况下保持和 NSDocument 打开

Posted

技术标签:

【中文标题】在没有任何窗口的情况下保持和 NSDocument 打开【英文标题】:Keeping and NSDocument open without any windows 【发布时间】:2013-11-11 14:00:55 【问题描述】:

我有一个基于文档的应用程序,它有两种文档类型。第一个NSDocument 子类是“主”文档(mainDoc),它的.xib 文件是应用程序的主编辑窗口。第二个NSDocument 类是一个数据源文件(dataDoc),其中一组保存在用户的Application Support 文件夹中,并且打开该组(或子集)以供mainDoc 窗口使用。可以编辑 dataDoc 文件,这是在他们自己的窗口中从他们自己的 .xib 文件中完成的。

使用openDocumentWithContentsOfURL:display:completionHandler: 直接打开dataDocs 而不创建它们的窗口,但是,在它们被编辑后保持它们打开(即它们唯一的NSWindowController 被关闭)不是。我创建了一个NSWindowController 子类,认为这会有所帮助。但是,覆盖 shouldCloseDocument 并没有帮助,因为如果最后一个 NSWindowController 已关闭(如 Apple 文档中所述),无论我的意愿如何,该文档都会关闭。

如何关闭文档的窗口但保持文档打开?我错过了什么明显的东西吗?

我想到的一种可能性是将 mainDoc 的窗口控制器添加到所有打开的 dataDocs 的窗口控制器中。这是最好的解决方案吗?它看起来不优雅,需要一些东西。

另一种可能是每次关闭后重新打开dataDoc,但这更不优雅,我认为这是最后的手段。

感谢您的帮助!

【问题讨论】:

将 mainDoc 的 windowController 添加到其他文档不起作用,因为 NSWindowController 无法在文档之间共享(根据 Apple doc for addWindowController: 【参考方案1】:

浏览 NSDocument 文档,对我来说最简单的解决方案似乎是为每个 NSDocuments 添加一个空的 NSWindowController。例如,我会尝试拥有一个没有 NIB 的 NSWindowController,当它被要求将其窗口放在前面时,它只是返回“确定”并且没有做任何事情。

【讨论】:

以上是关于在没有任何窗口的情况下保持和 NSDocument 打开的主要内容,如果未能解决你的问题,请参考以下文章

进度 - NSDocument 应用程序上的加载窗口

Django - 如何在不刷新页面的情况下保持在同一页面上?

在啥情况下 [NSDocument fileURL] 可以为零?

使用 NSDocument 时如何隐藏保存面板

使用 NSDocument 和 NSWindow 跟踪 NSTextView 的变化

OS X Cocoa:基于 NSDocument 的应用程序未保存