1

我正在开发一个示例应用程序来帮助我了解 Core Data。在这个应用程序中,我创建了一个由实体“朋友”和“城市”组成的模型。该应用程序在 NSTableView 中列出了我的朋友以及他们来自哪个城市。在这个表格视图中,我希望 City 列是一个带有城市列表的 NSComboBoxCell。我已经走到这一步了……现在解决问题:

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

安迪·阿什维尔
弗朗索瓦·蒙特利尔
杰夫·阿什维尔

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

安迪蒙特利尔
弗朗索瓦·蒙特利尔
杰夫蒙特利尔

应用程序中仍然有两个不同的城市,但它们现在都有蒙特利尔这个名字。

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

4

1 回答 1

3

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

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

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

如果您查看 NSPopupButton 的可用绑定,您会发现不同之处。您可能希望使用 NSPopupButton(Cell) 将 Cities 分配给 Friends,并使用某种“侧面”、基于 NSTableView 的编辑器来管理您的城市名称——这实际上是两个不同的任务。

于 2011-06-29T05:00:19.207 回答