gpt4 book ai didi

cocoa - 如何使用 NSComboBoxCell、NSTableView 和 Core Data 设置关系

转载 作者:行者123 更新时间:2023-12-03 16:59:24 25 4
gpt4 key购买 nike

我正在开发一个示例应用程序来帮助我了解核心数据。在此应用程序中,我创建了一个由实体“Friend”和“City”组成的模型。该应用程序在 NSTableView 中列出了我的 friend 以及他们来自哪个城市。在此 TableView 中,我希望城市列成为带有城市列表的 NSComboBoxCell。我已经到目前为止......现在解决问题:

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

Andy      AshevilleFrancois  MontrealJeff      Asheville

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

Andy      MontrealFrancois  MontrealJeff      Montreal

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

考虑到我设置绑定(bind)的方式,这一切对我来说都是有意义的。我通过将模型键路径设置为“city.name”并将 Controller 键设置为arrangedObjects(其中包含好友列表)来绑定(bind)城市表列的值。当然,当单元格的值发生变化时,它也会修改 city.name。那么我的问题就变成了什么是正确的方法来做到这一点,以便改变城市而不是城市名称?

最佳答案

NSComboBox 的目的是“允许您直接输入文本(就像使用 NSTextField 一样)或(...)从显示的项目列表中进行选择”。 (摘自苹果 cocoa 引用)。

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

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

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

关于cocoa - 如何使用 NSComboBoxCell、NSTableView 和 Core Data 设置关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6497446/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com