Cocoa:NSArrayController的自定义控制器键

时间:2010-09-15 10:04:05

标签: cocoa interface-builder cocoa-bindings nsarraycontroller

是否可以为NSArrayController创建自定义控制器密钥?有“arrangeObjects”,“selection”等的键......是否有可能实现自己的?我似乎无法在任何地方找到任何信息。

我想要做到这一点的原因(除了它看起来像是一件有用的事情)是:

我有实体“Car”,属性为“color”和“mileage”,还有一个数组控制器“CarArrayController”,它包含这些对象并将它们显示在表格中。在表格下方,我想要两个文本字段,一个显示红色汽车总里程,另一个显示蓝色汽车总里程。显然我可以显示所有汽车的总数:Bind Value To“CarArrangedController.arrangedObjects。@ sum.mileage”,但到目前为止,我还是无法获得红色和蓝色汽车的单独总和而没有实现更多阵列或阵列控制器。

如果我可以创建一个显然只返回红色汽车的Controller Key“arrangeRedCarObjects”,我可以绑定到:“CarArrangedController.arrangedRedCarObjects。@ sum.mileage”。

我似乎找不到任何方法来实现我的目标:(

必须有办法获得我需要的结果(这似乎是一般问题),请帮忙!

干杯,

奥利

2 个答案:

答案 0 :(得分:1)

控制器键不仅仅是字符串:它们是NSArrayController的方法,每个方法都经过一些逻辑,创建一个对象,然后返回该对象。你不能只是添加密钥,因为密钥后面没有任何逻辑。

因此,如果您不想制作更多阵列控制器,则需要制作功能更强大的阵列控制器。创建NSArrayController的子类,实现所需键的方法,并在这些方法中,自问源数组(例如,arrangedObjects),执行您想要的任何限制和重新排列,并返回该结果。

不要忘记将新方法声明为依赖于其源属性(例如,arrangedRedCarObjects依赖于arrangedObjects)。这是另一件事,只是添加键到列表将无法完成:它不知道你的新键应该依赖什么源属性。

答案 1 :(得分:0)

如果您有办法询问汽车是红色还是蓝色,您可以创建两个辅助阵列控制器(由主控制器的内容阵列绑定到主控制器的arrangedObjects),每个控制器都带有一个过滤器谓词,将数组限制为适当的汽车颜色。