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和阵列控制器未正确更新

先谢谢你

示例

为了澄清,这里有一个假设的例子:


假设我有一份在其他地方保存的国家列表。在弹出按钮中选择其中一个国家/地区。每个国家都有一套城市。当一个国家被选中时,一个表格视图将由它的城市填充。

我没有找到任何简单地通过拖放来实现这一点的方法。我必须为城市表实现一个委托和数据源(来自示例)。弹出按钮中的选择更改将通知窗口控制器,这将更新表视图代理/数据源上的内容


实际上,我觉得这是一种更好的解决问题的方法(比绑定和数组控制器),因为它可以更好地控制特殊情况。

没有委托/数据源设置,有一种解决方案

我的背景是:

  • CoreData
    model对于父项和子项,一个父项通过名为Children的关系拥有多个子项。两者都有一个属性
    名称
  • 这两个实体必须作为类可用(每个类都有一个
    .m
    和一个
    .h
    )。(如果您转到文件新文件CoreData NSManagedObjectSubclass,Xcode将为您写入它们。)现在,ParentObject.children可以访问ParentObject的子对象
  • 两个
    nsarraycontroller
    ParentArrayController
    ChildArrayController
  • 两个
    nStableView
    ParentTable
    ChildTable
    ,每个都有一列用于
    名称
    。(只要由
    NSArrayController
    控制,使用弹出窗口还是表格都不重要)
应采取的步骤如下:

  • 像往常一样将两个NSArrayController连接到MangagedObjectContext,并将它们设置为模式:
    实体名称
    ,以及它们各自的实体(父实体或子实体)
  • 像往常一样,将两个TableView(它们的列)绑定到它们的NSArrayController
  • 现在神奇的是:在ControllerContent内容集下的
    ChildArrayController
    s绑定部分,使用ControllerKey:
    selection
    和ModelKeyPath:
    children
    绑定到
    ParentArrayController
完成了。如果在ParentTable中选择ParentObject,则ChildTable将显示其子对象

要向父对象添加和删除子对象,可以使用
(void)addChildrenObject:(Child*)值Parents.m
类文件中为您编写的code>方法