分层NSPopupButton绑定

时间:2016-06-02 17:17:57

标签: cocoa cocoa-bindings nspopupbutton

我试图让两个相互关联的NSPopupButton与“孩子”上的绑定有问题。按钮。

我有三种核心数据实体类型:OrderClientStationStation - > Client是多对一的,因此Client有多个Station,但Station只能指向一个客户。

Order附加了一个Station,因此我创建了所有绑定,如下所示。我可以从第一个下拉列表中正确选择任何客户端,但是站点下拉列表只显示当前选定的站点。我没有看到所有可用的电台,如果我更换了客户端,我就看不到可供选择的新电台列表。

订单控制器

NSObjectController绑定到视图控制器中的order实体属性。

客户端阵列控制器

只需绑定到视图控制器的managedObjectContext即可获取所有客户端。

电台阵列控制器

enter image description here enter image description here

客户NSPopupButton

Content Binding Content Values Binding Selected Index Binding

Station NSPopupButton

Station Dropdown Content Binding Station Dropdown Content Values Binding Station Dropdown Selected Object Binding

1 个答案:

答案 0 :(得分:0)

客户端弹出按钮的选定值用于过滤站点,它不应该更改订单站点的客户端。将客户端弹出按钮的选定索引(而不是选定对象)绑定到客户端阵列控制器,控制器密钥selectionIndex,无模型密钥路径。

将电台弹出按钮的选定对象绑定到订单对象控制器,控制器键selection,模型关键路径station

当用户选择客户端时,所选站仍然是订单的站。如果此工作站具有不同的客户端,则工作站弹出按钮不会自动选择另一个工作站。您可以在客户端弹出按钮的操作中修复此问题。例如:

- (IBAction)clientAction:(id)sender {
    NSArray *stations = self.stationArrayController.arrangedObjects;
    if (![stations containsObject:order.station]) {
        if (stations.count > 0)
            self.order.station = stations[0];
        else
            self.order.station = nil;
    }
}