Core data NSTableView内容基于对另一个NSArrayController的选择
问题 我有一个弹出按钮(Core data NSTableView内容基于对另一个NSArrayController的选择,core-data,nsarraycontroller,nspopupbutton,Core Data,Nsarraycontroller,Nspopupbutton,问题 我有一个弹出按钮(nspoupbutton),它绑定到一个NSArrayController。此阵列控制器处理每个具有子对象集合的父对象。我有一个NSTableView,需要在弹出窗口中显示所选项目的这些子项。此外,需要对子项列表进行操作(添加/删除) 我试着用很多方法来实现这一点,但总是遇到一些使解决方案复杂化的事情。实现这一点的最佳方式是什么 数据在此由核心数据管理,因此,集合为NSSets。我已尝试在父级中添加转换方法以返回排序的NSArray(以便将其与NSArrayControl
nspoupbutton
),它绑定到一个NSArrayController
。此阵列控制器处理每个具有子对象集合的父对象。我有一个NSTableView
,需要在弹出窗口中显示所选项目的这些子项。此外,需要对子项列表进行操作(添加/删除)
我试着用很多方法来实现这一点,但总是遇到一些使解决方案复杂化的事情。实现这一点的最佳方式是什么
数据在此由核心数据管理,因此,集合为NSSet
s。我已尝试在父级中添加转换方法以返回排序的NSArray
(以便将其与NSArrayController
绑定),但这种方法会阻止KVO和阵列控制器未正确更新
先谢谢你
示例
为了澄清,这里有一个假设的例子:
假设我有一份在其他地方保存的国家列表。在弹出按钮中选择其中一个国家/地区。每个国家都有一套城市。当一个国家被选中时,一个表格视图将由它的城市填充。我没有找到任何简单地通过拖放来实现这一点的方法。我必须为城市表实现一个委托和数据源(来自示例)。弹出按钮中的选择更改将通知窗口控制器,这将更新表视图代理/数据源上的内容
实际上,我觉得这是一种更好的解决问题的方法(比绑定和数组控制器),因为它可以更好地控制特殊情况。没有委托/数据源设置,有一种解决方案 我的背景是:
model对于父项和子项,一个父项通过名为Children的关系拥有多个子项。两者都有一个属性CoreData
名称
- 这两个实体必须作为类可用(每个类都有一个
和一个.m
)。(如果您转到文件新文件CoreData NSManagedObjectSubclass,Xcode将为您写入它们。)现在,ParentObject.children可以访问ParentObject的子对象.h
- 两个
:nsarraycontroller
和ParentArrayController
ChildArrayController
- 两个
:nStableView
和ParentTable
,每个都有一列用于ChildTable
。(只要由名称
控制,使用弹出窗口还是表格都不重要)NSArrayController
- 像往常一样将两个NSArrayController连接到MangagedObjectContext,并将它们设置为模式:
,以及它们各自的实体(父实体或子实体)实体名称
- 像往常一样,将两个TableView(它们的列)绑定到它们的NSArrayController
- 现在神奇的是:在ControllerContent内容集下的
s绑定部分,使用ControllerKey:ChildArrayController
和ModelKeyPath:selection
绑定到children
ParentArrayController
(void)addChildrenObject:(Child*)值Parents.m
类文件中为您编写的code>方法