在同一个NSOutlineView中显示不同的NSManagedObject实体

时间:2011-02-12 21:38:47

标签: core-data nsoutlineview

基本上我有三个不同的核心数据实体(ABC)和A包含一组B和{{1}包含一组B s。但是,这三个实体彼此截然不同,它们没有共同的方法来访问彼此的子节点或视图中显示的值。

我正试图在NSOutlineView中显示这三个内容。还有其他解决方案,但我想出了两个不同的解决方案:

  1. 实施NSOutlineViewDataSource协议并以不同方式处理每个实体。

  2. 使用类别合并类,并为NSOutlineView添加常用(瞬态)方法/属性以供使用。这些方法/属性从模型实体的属性中获取实际值。

  3. 我选择了第二个选项并为子项和显示值添加了getter。但是,这样,键值观察不再起作用,并且模型中的更改不会反映到视图中。我理解为什么,但我不确定如何以正确的方式解决这个问题。我正在考虑某种方式来通知实际模型值的变化并将它们转发给视图。

    有没有简单的方法来转发这些通知,还是我应该考虑其他替代方案?

    简而言之,我需要在NSOutlineView中显示不同类型的实体,我不想弄乱模型。

2 个答案:

答案 0 :(得分:0)

你不能只使用关系A->B->C来获取对象A并在大纲视图中显示它们吗?

答案 1 :(得分:0)

经过一些反复试验后,我发现创建自定义数据源非常简单,并决定采用第一选择。还有,拖拽和放弃支持这种感觉更加自然。

唯一的问题是outlineView:setObjectValue:forTableColumn:byItem:,需要指定列标识符引用。我觉得不直接的依赖关系总是应该避免的,但与使这项工作很好地相比,这是一个小问题。