我有一个示例应用程序,我正在努力帮助我了解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。那么我的问题就变成了这样做的正确方法,以便城市改变而不是城市名称?
答案 0 :(得分:3)
NSComboBox的目的是“允许您直接输入文本(就像使用NSTextField一样)或(...)从显示的项目列表中选择”。 (取自Apple Cocoa Ref)。
所以组合框是一个美化的NSTextField。您期望的行为更符合NSPopupButton。
如您所述,NSComboBox绑定会更改当前City的名称值,但不会更改对象关系,因此它们会更改由关系表示的当前城市的名称(然后将其“传播”给其他朋友指向同一个城市实体。)
如果你看看NSPopupButton的可用绑定,你会看到差异。您可能希望使用NSPopupButton(单元格)将城市分配给朋友,使用某种“侧面”,基于NSTableView的编辑器来管理您的城市名称 - 这实际上是两个不同的任务。