如何使用NSComboBoxCell,NSTableView和Core Data设置关系

时间:2011-06-27 18:47:03

标签: cocoa core-data nstableview cocoa-bindings nscombobox

我有一个示例应用程序,我正在努力帮助我了解Core Data。在这个应用程序中,我创建了一个由实体“朋友”和“城市”组成的模型。该应用程序列出了我的朋友以及他们来自NSTableView的城市。在此表视图中,我希望City列为NSComboBoxCell,其中包含城市列表。我到目前为止...现在解决这个问题:

当我从组合框中选择城市时,应用程序将获取所选城市名称的值,并将其应用于朋友当前所在城市的名称。相反,我希望应用程序实际上改变用户来自的城市,而不是城市的名称...这有点令人困惑的问题,所以这里是一个例子:从像

这样的朋友列表开始
Andy      Asheville
Francois  Montreal
Jeff      Asheville

如果我使用NSComboBoxCell将Andy的城市从阿什维尔改为蒙特利尔,该应用程序实际上将城市阿什维尔的名称更改为蒙特利尔,结果如下:

Andy      Montreal
Francois  Montreal
Jeff      Montreal

申请中仍然有两个不同的城市,但他们现在都有名称蒙特利尔。

考虑到我设置绑定的方式,这一切对我都有意义。我通过将Model Key Path设置为“city.name”并将Controller Key设置为包含朋友列表的arrangeObjects来绑定city table列的值。当然,当一个单元格的值发生变化时,它会修改city.name。那么我的问题就变成了这样做的正确方法,以便城市改变而不是城市名称?

1 个答案:

答案 0 :(得分:3)

NSComboBox的目的是“允许您直接输入文本(就像使用NSTextField一样)或(...)从显示的项目列表中选择”。 (取自Apple Cocoa Ref)。

所以组合框是一个美化的NSTextField。您期望的行为更符合NSPopupButton。

如您所述,NSComboBox绑定会更改当前City的名称值,但不会更改对象关系,因此它们会更改由关系表示的当前城市的名称(然后将其“传播”给其他朋友指向同一个城市实体。)

如果你看看NSPopupButton的可用绑定,你会看到差异。您可能希望使用NSPopupButton(单元格)将城市分配给朋友,使用某种“侧面”,基于NSTableView的编辑器来管理您的城市名称 - 这实际上是两个不同的任务。