在多个NSWindowControllers之间共享NSDocument子类

时间:2011-05-28 23:08:10

标签: objective-c cocoa nsdocument

我有一个目前不是基于文档的应用程序的应用程序(因为我认为它比它的价值更麻烦)。但是我一直认为现在可能值得,但有一个问题我还没有解决。在多个窗口之间共享NSDocument个子类。

NSDocument的子类必须绑定到单个NSWindowController,还是可以在多个窗口之间共享?我问的原因是我的应用程序文件可能会增加100MiB(或更大),并且用户可能会在多个窗口中打开同一个文件。此外,这些文件需要相对较长的时间来处理,因此允许多个窗口访问相同的NSDocument将是非常好的。此外,文件使用大量数据快速更新,因此同步同一文档的多个实例会占用大量CPU时间。

是否有人这样做过,或者甚至可以使用基于文档的应用程序完成此操作?非常感谢有关此主题的任何建议。

4 个答案:

答案 0 :(得分:2)

您应该能够使用NSDocument Class Reference中找到的方法- (void)addWindowController:(NSWindowController *)aController来做到这一点。会有很多逻辑让它知道在哪里发送什么数据,但这至少可以让你控制链接到同一文档的几个窗口控制器

答案 1 :(得分:1)

到目前为止,这是我找到的最好的答案,它没有直接回答这个问题,而是处理了我面临的许多相同的障碍。希望别人能为我提供更好,更详细,更直接的答案。

http://www.cocoadev.com/index.pl?DocumentBasedAppWithOneWindowForAllDocuments

答案 2 :(得分:0)

Document架构将帮助您管理多个模型 - 即。如果您希望用户同时打开多个模型并能够在它们之间切换,则可能对您有所帮助。

它不会阻止你做任何事情,它不会让其他事情变得困难。处理Windows和GUI仍然取决于您,如果您不确定如何构建它,如果您使用文档,它将不会有任何区别。

如果窗口的内容可以随时间变化以表示不同的文档 - 当许多文档打开时会发生什么?这可能是一个难以解决的问题,我从技术的角度来看并不是真正的意思(更改窗口的内容就像window.contentView = newView一样简单,对吧?)。

听起来你对文档架构是什么以及它能为你做些什么有很多误解。

答案 3 :(得分:0)

默认情况下,每个文档都有一个专用的Windows控制器。但你可以覆盖

- (void)makeWindowControllers

创建自己的Windows控制器并将其添加到Slev提到的文档中。