我有一个目前不是基于文档的应用程序的应用程序(因为我认为它比它的价值更麻烦)。但是我一直认为现在可能值得,但有一个问题我还没有解决。在多个窗口之间共享NSDocument
个子类。
NSDocument
的子类必须绑定到单个NSWindowController
,还是可以在多个窗口之间共享?我问的原因是我的应用程序文件可能会增加100MiB(或更大),并且用户可能会在多个窗口中打开同一个文件。此外,这些文件需要相对较长的时间来处理,因此允许多个窗口访问相同的NSDocument
将是非常好的。此外,文件使用大量数据快速更新,因此同步同一文档的多个实例会占用大量CPU时间。
是否有人这样做过,或者甚至可以使用基于文档的应用程序完成此操作?非常感谢有关此主题的任何建议。
答案 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提到的文档中。