如何将NSOutlineView与多个核心数据实体作为组一起使用

时间:2018-08-12 19:57:41

标签: swift cocoa core-data nsarraycontroller nstreecontroller

我一直在研究如何使用多个实体从核心数据中填充源列表。如果我有一个实体,则可以遵循文档,并使用NSTreeController填充数据并将其绑定到NSOutlineView。

在我的特定情况下,我大约有3个硬编码组,其中每个组都与一个单独的核心数据实体相关。我试图合并它们,但是它们都与不同实体有关系,因此我无法将它们全部合并到一个核心数据实体中。理想情况下,我想将3个核心数据实体绑定到“源列表”,它们看起来如下所示(其中笔,纸和书桌都是单独的实体):

enter image description here

是否有人知道我将能够使用控制器来帮助管理三个实体并将其与“源列表”合并,还是最好的方法是手动填充NSOutlineView?我可以使用某种NSArrayControllers数组填充NSOutlineView吗?有没有一种方法可以覆盖NSTreeController来从三个来源中获取数据?

1 个答案:

答案 0 :(得分:0)

作为一个实验,我创建了一个具有大纲视图和树形控制器的项目。树控制器的内容是一个字典数组,该数组控制器(在实体模式下)是出口:

treeController.content = [
    ["arrayController": penTreeArrayController, "name": "Pens"],
    ["arrayController": paperTreeArrayController, "name": "Papers"],
    ["arrayController": deskTreeArrayController, "name": "Desks"]
]

树控制器是NSTreeController的子类:

override func childrenKeyPath(for node: NSTreeNode) -> String? {
    if node.representedObject is NSManagedObject {
        return nil
    }
    return "arrayController.arrangedObjects"
}

似乎可行。当我添加或删除笔时,轮廓视图会自动更新。反之亦然,我无法使用树控制器添加笔。