4

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

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

正因为如此,我现在在实现诸如新建、打开和保存等方法时遇到了问题——我发现自己编写了很多手册上说应该由超类实现的代码。

因为我正处于十字路口,所以我想知道我应该如何实现我的应用程序。我应该将我的主窗口重新分解为一个扩展 NSWindowController 的类并从包含主菜单的 xib 启动它,还是应该保持原样并覆盖 newDocument、openDocument 等以获得所需的功能?


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

4

1 回答 1

1

您将继承NSDocument 以处理一种类型的文档。它可能是通用类型,例如任何图像,也可能是特定类型,例如 PDF,但您需要创建一个 NSDocument 子类来处理该类型,因为 NSDocument 本身不知道如何处理。

我不确定为什么人们将 NSWindowController 子类化。它似乎工作得很好。

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

我通过使(主窗口)项目列表扩展 NSDocument 并且每个其他窗口扩展 NSWindowController 来开始我的项目。

那是错误的。如果有的话,您的辅助窗口是文档窗口。主窗口不是。

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

如果项目不对应于文件,那么您的应用程序不是基于文档的,并且您不应该假装它是:在这种情况下根本不要使用 NSDocument 或 NSDocumentController 。

于 2010-03-07T22:02:49.940 回答