基本上我有三个不同的核心数据实体(A
,B
,C
)和A
包含一组B
和{{1}包含一组B
s。但是,这三个实体彼此截然不同,它们没有共同的方法来访问彼此的子节点或视图中显示的值。
我正试图在NSOutlineView中显示这三个内容。还有其他解决方案,但我想出了两个不同的解决方案:
实施NSOutlineViewDataSource协议并以不同方式处理每个实体。
使用类别合并类,并为NSOutlineView添加常用(瞬态)方法/属性以供使用。这些方法/属性从模型实体的属性中获取实际值。
我选择了第二个选项并为子项和显示值添加了getter。但是,这样,键值观察不再起作用,并且模型中的更改不会反映到视图中。我理解为什么,但我不确定如何以正确的方式解决这个问题。我正在考虑某种方式来通知实际模型值的变化并将它们转发给视图。
有没有简单的方法来转发这些通知,还是我应该考虑其他替代方案?
简而言之,我需要在NSOutlineView中显示不同类型的实体,我不想弄乱模型。
答案 0 :(得分:0)
你不能只使用关系A->B->C
来获取对象A并在大纲视图中显示它们吗?
答案 1 :(得分:0)
经过一些反复试验后,我发现创建自定义数据源非常简单,并决定采用第一选择。还有,拖拽和放弃支持这种感觉更加自然。
唯一的问题是outlineView:setObjectValue:forTableColumn:byItem:
,需要指定列标识符引用。我觉得不直接的依赖关系总是应该避免的,但与使这项工作很好地相比,这是一个小问题。