Objective c 如何使用NSTableView和NSTableView绑定不同的实体?

Objective c 如何使用NSTableView和NSTableView绑定不同的实体?,objective-c,nstableview,cocoa-bindings,nsarraycontroller,nstabview,Objective C,Nstableview,Cocoa Bindings,Nsarraycontroller,Nstabview,我有一个NSArrayController,它处理GeometryShape的实体。 几何图形有:名称,类型,颜色。 LineShape是一种GeometryShape,具有:beginPositionX,beginPositionY,endPositionX,endPositionY。 圆形是一种几何图形,具有:位置X,位置Y,半径 NSTableView显示了NSArrayController中插入的所有形状,其中每一列都与arrangedObjects键名绑定 当我选择一个线型时,它的属性

我有一个
NSArrayController
,它处理
GeometryShape
的实体。
几何图形
有:
名称
类型
颜色
LineShape
是一种
GeometryShape
,具有:
beginPositionX
beginPositionY
endPositionX
endPositionY
圆形
是一种
几何图形
,具有:
位置X
位置Y
半径

NSTableView
显示了
NSArrayController
中插入的所有形状,其中每一列都与
arrangedObjects
键名绑定

当我选择一个线型时,它的属性将显示在“线”选项卡中,这是默认选项卡

现在,如果我选择一个圆形状,我希望选择“圆”选项卡并显示“圆”属性

…因此,根据我选择的形状类型,将选择相应的选项卡并显示相应的形状属性

我如何才能实现这个优秀的:)模型


我认为您应该实现一个NSTableViewDelegate,并在
tableViewSelectionDidChange:
的实现中以编程方式选择适当的选项卡。当选择发生更改时,您只需抓取选项卡视图的IBOutlet并根据arrayController的选择分配一个新的selectedIndex

或者,您可以将选项卡视图的selectedIndex的值绑定到阵列控制器的选择,但是您需要一个自定义值转换器,该转换器将选择的
id
转换为反映适当类的
nsuiger

在这两种实现中,您都使用
isKindOfClass
编写代码,并映射到一个整数

您还可以将选项卡视图的selectedLabel绑定到
selection.class的数组控制器键路径,但我猜您仍然需要一个valuetransformer包装
NSStringFromClass()
,如中所述。不过,我不能完全确定是否有一种完全非代码的方式可以将类转换为可以将selectedLabel绑定到的字符串

就个人而言,我不喜欢实现自定义值转换器,因为您编写的代码允许实现隐藏在IB中的行为。。。所有这些都是为了避免编写可能存在于自定义tableview委托中的代码