Cocoa中单个窗口中的多个文档

Cocoa中单个窗口中的多个文档,cocoa,nsdocument,document-based,Cocoa,Nsdocument,Document Based,我想编写一个应用程序,它可以通过选项卡式界面在一个窗口中包含多个文档。我是否应该避免NSDocument体系结构(基于Cocoa文档的应用程序模板)?据我所知,每个文档只支持一个或多个窗口,反之亦然 我已经为这个问题绞尽脑汁了一段时间,并且已经在NSDocument体系结构上构建了我的大部分应用程序,但是我无法找到一种将多个文档与单个窗口关联的好方法 编辑:除了基本文档窗口外,我还希望有项目文档窗口。在这种复杂程度上,是否仍值得对NSDocument体系结构进行黑客攻击?苹果是否使用NSDocu

我想编写一个应用程序,它可以通过选项卡式界面在一个窗口中包含多个文档。我是否应该避免NSDocument体系结构(基于Cocoa文档的应用程序模板)?据我所知,每个文档只支持一个或多个窗口,反之亦然

我已经为这个问题绞尽脑汁了一段时间,并且已经在NSDocument体系结构上构建了我的大部分应用程序,但是我无法找到一种将多个文档与单个窗口关联的好方法


编辑:除了基本文档窗口外,我还希望有项目文档窗口。在这种复杂程度上,是否仍值得对NSDocument体系结构进行黑客攻击?苹果是否使用NSDocument架构编写Xcode(以这种方式工作)?

在这种情况下,使用基于NSDocument的架构并不一定是个坏主意;但这可能需要相当多的质疑


很可能您不仅需要将NSDocument子类化,而且还必须将其子类化为兄弟NSDocumentController。一旦这样做了,劫持和避免调用-makeWindowController和其他与窗口相关的方法应该是一件简单的事情,允许您以任何方式包装文档“windows”,但仍然保留了基于文档的应用程序的优点。

几年前,我曾尝试将一个NSDocument应用程序塞进一个窗口选项卡式界面,但几个月后,我回去重构文档体系结构,结果非常沮丧。这不是不可能的,但是你最终解决了太多的问题,以至于最终的结果几乎不像一个合适的NSDocument应用程序。与其为了颠覆Cocoa框架而编写大量代码,不如重写您确实需要的代码。

另一种技术,我还没有尝试过,但计划尝试过,就是为每个文档提供一个无边界窗口。这样,一个文档有一个窗口,该窗口可能可见,也可能不可见

然后,创建一个包含实际窗口边框的包装器窗口,以及在可见的无边框文档窗口之间切换的任何控件。文档窗口是包装器的子窗口,它确保在移动/最小化/关闭窗口时两者都将链接

对于每个无边框文档窗口,包装器窗口都有一个占位符视图,调整大小后,该视图将调整文档窗口的大小,并将文档窗口的视图注入响应器链(发送到占位符视图的任何事件,在传递到占位符的父视图之前,都将发送到文档窗口的视图)


还有一些小细节需要解决,但我认为这种方法会很好地工作。

我有一个相同类型的项目,不同的独立文档,我想在一个窗口中显示,有一个侧边栏可以在文档之间切换,所以我自己做了一些搜索

我刚刚通过阅读Cocoadev的参考资料发现了一条有趣的线索。从MikeTrent的回答来看,使用NSDocument似乎是一种非常可行的方法。您只需要子类化NSDocumentController


我也喜欢使用无边界的子窗口

看起来xcode确实使用了NSDocument,但是在项目中有多个选项卡的窗口只是一个文档(项目),这也是一个非常有趣的工具,可以在cocoa应用程序中查看它们是如何做到的,这是F-Script@cobbal:interest。这是否意味着文本文件不被表示为NSDocuments?它实际上并不像你所能做的那么多代码。第一个链接是BrokernPerhaps,它们在5月份出现过,但现在运行良好。