如何在 Interface Builder 中配置 NSTreeController

How to configure NSTreeController in Interface Builder

当我在 Interface Builder(在 Xcode 4.6.3 中)中 select 一个 NSTreeController 并查看属性检查器时,我看到两个部分名为 Tree Controller 和 Object Controller。树控制器部分有一定道理,但我找不到对象控制器部分的解释。第一项是 "Mode",带有选项 "Class" 和 "Entity Name",我认为您在使用 Core Data 时使用后者,在不使用时使用前者。我没有使用核心数据。那么,下一项Class Name 是什么意思?它默认为 NSMutableDictionary,但我认为标准的树节点类型是 NSTreeNode。具体来说,如果我希望我的树节点是一个 NSTreeNode,其表示的对象是一个 NSMutableDictionary,我将如何填写对象控制器部分?


Post-事后回答:虽然我现在看到可以使用类型 NSMutableDictionary 的节点来构建大纲视图的内容树,但是创建 NSTreeNode。首先,NSTreeNode 自动跟踪父链接,这在某些情况下很有用。其次,我可以将我的数据成员定义为属性,然后使用点符号而不是 objectForKey: 消息访问它们。

Object Controller 面板只是 Interface Builder 的 允许您设置 entityName 属性 的 NSTreeContollerobjectClass 属性。 (NSTreeControllerNSObjectController 的子 class,这是定义这些属性的地方。)

NSTreeNode 是 class 被 Cocoa 用来在你的对象(或实体)被放置在树中之前包装它们。你在这个过程中没有发言权,它是自动发生的,因此与 Attributes Inspector 无关。更重要的是,您很少(永远不会?)需要自己创建一个 NSTreeNode 实例 - 尽管您会经常与它们交互。

所以看起来您实际上不需要在此面板中执行任何操作 - 默认值就是您所需要的。当然,您仍然需要填写 Key Paths 部分。

Here's a very simple demo project(使用 Xcode 6.3 创建)。希望这会有所帮助。