我何时应该扩展NSDocument以及何时应该扩展NSWindowController?

时间:2010-03-07 21:51:13

标签: objective-c cocoa architecture nsdocument nswindowcontroller

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

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

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

因为我在十字路口,所以我想知道如何实现我的申请。我应该将我的主窗口重新分配到一个扩展NSWindowController的类并从保存主菜单的xib启动它,或者我应该按照它们的方式保存它们并只是覆盖newDocument,openDocument等以获得所需的功能?


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

1 个答案:

答案 0 :(得分:1)

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

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

  

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

     

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

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

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

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