2

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

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

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

4

4 回答 4

2

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

于 2011-05-28T23:44:01.447 回答
1

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

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

于 2011-05-30T04:59:51.940 回答
0

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

它不会阻止你做任何事情,它不会让原本简单的事情变得困难。处理 Windows 和 GUI 仍然取决于您,如果您不确定如何构建它,那么无论您是否使用文档都不会产生任何影响。

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

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

于 2011-05-29T23:21:33.617 回答
0

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

- (void)makeWindowControllers

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

于 2012-10-31T08:14:14.690 回答