4

我有一个应用程序,它拥有一个包含项目列表的主窗口,并且可以从该窗口打开未确定数量的窗口。每个窗口可以包含模型对象的多个实例,并将这些实例列在抽屉中。什么时候应该扩展NSDocument,什么时候应该扩展NSWindowController?

我通过使(主窗口)项目列表扩展NSDocument和每个其他窗口扩展NSWindowController来启动我的项目。但在功能上,主窗口每使用一次蓝色月亮就会使用一次,尽管这是用户启动应用程序时应该弹出的窗口,并且扩展NSWindowController的窗口是用户广泛使用的窗口,也是最终持有我的“文件”。

正因为如此,我现在遇到了实现诸如New,Open和Save等方法的问题 - 我发现自己写了很多代码,manuals说应该由超类实现。

因为我在一个十字路口,我不知道我应该如何执行我的申请。我是否应该将主窗口重新分配到扩展NSWindowController的类中,并从保存主菜单的xib中启动它,还是应该保持它们的状态并覆盖newDocument,openDocument等以获得所需的功能?


只是为了帮助与精神的形象,我的应用程序就像MSN - 我有一个主表,上面有几个项目(联系人列表上MSN),当我双击我打开一个项目窗口(您向用户开放聊天)。我的应用程序更进一步,为每个“聊天”窗口保留一个模型对象的几个实例,并且每个实例都可以通过抽屉中的表访问。

回答

1

你会子类 NSDocument为了处理一个类型的文件。它可能是一个普通的类型,比如任何图像或特定的类型,比如PDF,但是你需要创建一个NSDocument子类来处理这个类型,因为NSDocument本身并不知道如何。

我不知道为什么人们为NSWindowController子类。它似乎工作得不错,因为它是。

我有一个应用程序,它拥有一个包含项目列表的主窗口,并且可以从该窗口打开未确定数目的窗口。每个窗口可以包含模型对象的多个实例,并将这些实例列在抽屉中。

我通过使(主窗口)项目列表扩展NSDocument和每个其他窗口扩展NSWindowController来启动我的项目。

这是错误的。如果有的话,你的二级窗口是文档窗口。主窗口不是。

为主窗口创建一个新的控制器。当用户在该窗口中打开一个项目时,告诉文档控制器打开相关文件。您可能不需要将NSWindowController继承于此。

如果项目不符合的文件,那么你的应用程序不是基于文档的,你不应该假装它是:在所有在这种情况下,不要使用NSDocument或NSDocumentController

+0

他们可以是文件 - 用户绝对有选择创建,打开并保存从辅助窗口中的文本,所以我想我应该让这些扩展NSDocument。 主窗口,项目列表应该延伸到什么地方?我需要它在应用程序启动时打开,所以我想让它扩展NSWindowController并将其添加到MainMenu xib好? – ruipacheco 2010-03-07 22:20:52

+1

我会让主窗口的控制器成为NSObject直接子类的一个实例。正如我所说的,我不知道为什么人们对NSWindowController进行子类化,拥有一个窗口控制器或直接拥有窗口,这两者对我来说都工作得很好。 – 2010-03-07 22:45:43

+0

NSWindowController的好处是它自动参与响应者链,并处理顶级NIB对象的内存管理。所有这些都可以自己完成,但我不明白你为什么要推出自己的产品。我不认为NSWindowController增加了任何重要的开销。 – 2010-03-10 17:09:57

相关问题