代码之家  ›  专栏  ›  技术社区  ›  Alex

多个NSVIEW控制器的NS(阵列|树)控制器体系结构

  •  5
  • Alex  · 技术社区  · 15 年前

    我有一个非基于文档的核心数据应用程序。有一个 NSTreeController 管理以单个图形显示的对象集合的 NSOutlineView 作为源列表。它们是常见的类型:标题、文件夹、智能文件夹等。

    每个容器对象都有一个 contents NSTableView 和两个自定义图形视图(如果您真的想知道的话),但它们实际上只是相同数据的三种不同表示形式。它们应始终显示相同的对象、共享相同的选择等。

    我还使用了 NSViewController KTUIKit 当时,我可能会使用它,但我的视图控制器与她的非常相似,并且深受她的启发)

    就目前而言,我有一个 NStree控制器 位于源列表视图的视图控制器中。我也有一个 NSArrayController 在绑定到的每个子视图控制器中 NStree控制器

    因此,我认为需要改变的是:

    • 这个 需要移出大纲视图的控制器。
    • 应该有一间单人房 NSArrayController 可以绑定到每个内容视图,而不是三个单独的视图。虽然我不太确定这一点。

    我遇到的困难是弄明白 哪里

    1 回复  |  直到 15 年前
        1
  •  2
  •   Marc Charbonneau    15 年前

    NSArrayController和NSTreeController更多地被视为视图对象,而不是真正的控制器,因此听起来您走对了方向。我将以与您大致相同的方式开始,根据需要为每个NSViewController提供自己的NSArrayController或NSTreeController,并在运行时通过负责将所有部分放在一起的窗口控制器配置它们之间的绑定。

    如果您认为这样做可以简化事情,那么将NSArrayController和NSTreeController对象移动到窗口控制器听起来并没有什么问题。您仍然可以在IB中设置与视图控制器的representedObject的绑定,然后在适当的时间在窗口控制器中的代码中创建数组/树控制器。小心点,别把事情搞得太复杂了。我发现,如果在同一窗口中有许多视图控制器使用representedObject处理不同的内容,那么创建单独的、类型化的属性就更容易了,这样您就可以了解哪些部分放在哪里了。

    我真的不明白让数组/树控制器成为应用程序委托的一部分有什么好处,但我不知道你在那里做什么。也许你会从制作自己的“数据控制器”对象中获益?