使用共享窗口的基于文档的cocoa应用程序?

使用共享窗口的基于文档的cocoa应用程序?,cocoa,document-based,Cocoa,Document Based,我正在开发一个基于文档的应用程序。每个文档有三个窗口(因此有三个窗口控制器)。我想对其进行设置,以便在不同打开的文档之间共享三个窗口中的两个(根据需要交换视图)。这可能吗?有谁能给我指出正确的方向(文档或示例) 谢谢 在这种情况下,这些共享窗口控制器不应归任何文档所有(因为每个文档都有自己的一对“共享”窗口),而应是独立的,可能归应用程序代理或文档控制器所有。您可能还想制作windows面板,就像检查员一样 您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口

我正在开发一个基于文档的应用程序。每个文档有三个窗口(因此有三个窗口控制器)。我想对其进行设置,以便在不同打开的文档之间共享三个窗口中的两个(根据需要交换视图)。这可能吗?有谁能给我指出正确的方向(文档或示例)


谢谢

在这种情况下,这些共享窗口控制器不应归任何文档所有(因为每个文档都有自己的一对“共享”窗口),而应是独立的,可能归应用程序代理或文档控制器所有。您可能还想制作windows面板,就像检查员一样

您需要让每个控制器跟踪哪个窗口是主窗口,并在主窗口更改时相应地更新其窗口,因为新的主窗口可能有不同的文档


几乎所有关于如何创建检查器窗口的教程都会对您有所帮助。

看起来您需要在
NSDocument
子类中重写
-makeWindowController
,以创建所需的控制器,在NSDocument子类上调用
-addWindowController:
,以添加共享窗口控制器

我还没有做到这一点,但这些是我将要考虑的方法

来自苹果的NSDocument类参考:

makeWindowController

子类可以重写此方法以创建文档的初始窗口控制器

-(无效)makeWindowController

讨论

基类实现使用windowNibName创建一个NSWindowController对象,如果windowNibName返回一个名称,则将文档作为文件的所有者。如果重写此方法以创建自己的窗口控制器,请确保在创建它们后使用addWindowController:将它们添加到文档中

此方法由NSDocumentController打开调用。。。方法,但在某些情况下可能需要直接调用它


这是可能的,但这需要你方付出大量的工作。总之,以下是您需要做的事情:

  • 覆盖窗口控制器中的
    setDocument:
    ,并维护它与每个文档的关联
  • 确保每个窗口控制器(
    NSWindowController
    )在关闭窗口之前都与文档解除关联。对于可能在窗口内处理视图的每个视图控制器也是如此
  • 对文档控制器(
    NSDocumentController
    )进行子类化,并负责文档关闭,以确保在关闭任何文档之前将多文档窗口与文档分离
    NSDocumentController
    是一个单例,因此您需要在
    main menu.xib
    文件中添加一个实例来替换默认实例

你可以读我的。

这对我来说很有意义。谢谢我猜在概念上我一直认为文档需要拥有窗口控制器。提问者说其中两个窗口是共享窗口,所以它们的窗口控制器也应该共享。我不认为将相同的窗口控制器添加到多个文档中会很成功,特别是因为NSWindowController希望只由一个文档拥有。