如何创建源列表以将核心数据显示到多个关系?

Posted

技术标签:

【中文标题】如何创建源列表以将核心数据显示到多个关系?【英文标题】:How to create SourceList to show Core Data ToMany relations? 【发布时间】:2016-02-06 17:20:55 【问题描述】:

来自ios,我被困在NSOutlineView作为源列表,我已经阅读了很多资源但不能清楚地掌握它。

我想要的是,只是使用 NSTreeController 将 coreData ToMany 关系显示为 sourceList。我正在将数据从文本文件保存到磁盘。 实体和关系如下:

组>>项目>>描述

源列表示例:

我的应用程序不允许用户创建任何新实体,只是为了查看从 TextFile 中保存的内容。我可以通过 NSArrayController 做到这一点,但我需要在具有层次结构的单个表中显示数据。 在 NSArrayController 中,我只需要将托管对象上下文绑定到参数,并将对象控制器绑定到实体名称。在 TableView 上,我需要将内容和选择索引绑定到 NSArrayController。

How can I bind NSTreeController to SourceList and when children is selected, show another ToMany relation from Item to Description.

【问题讨论】:

【参考方案1】:

我可以想到两种解决方案,也许有更好的解决方案。

解决方案 1: 创建 NSTreeController 的子类并覆盖

- (NSString *)childrenKeyPathForNode:(NSTreeNode *)node

托管对象是node.representedObject

解决方案 2: 创建 NSManagedObject 子类并实现一个返回子关系的children 方法。

- (NSSet *)children 
    return self.itemsInGroup;

将树控制器的 childrenKeyPath 设置为 'children'。

我觉得解决方案 2 感觉不对,托管对象不应该包含视图代码,但是如果你已经有了 NSManagedObject 子类,它就很容易实现。

【讨论】:

,Source List 仅显示 Group 的***列表。当我公开三角形时,我收到一个错误:实体项目不符合键“名称”的键值编码。所以它确实获取关系 NSSet itemsInGroup,我需要在哪里输入 NSTreeController 中 Item Entity 的“name”属性。 实体Item 是否还有属性name?关键name 可能在大纲视图的绑定中。 我将属性名称更改为标题(它变得有点混乱),这两个实体属性必须具有相同的名称是否重要。 大纲视图中的文本字段只能一键绑定。我也在为 NSOutlineView/NSTreeController 和核心数据而苦苦挣扎。我现在在所有实体中都有一个方法displayName。另一种解决方案是委托方法outlineView:viewForTableColumn:item: 和每个实体的不同视图。

以上是关于如何创建源列表以将核心数据显示到多个关系?的主要内容,如果未能解决你的问题,请参考以下文章

核心数据父子关系

在核心数据中搜索所有具有空“对多”关系的对象

如何修改makefile以将更改的源编译到对象目录中,文件列表除外

如何创建从一个实体到另一个现有实体的核心数据关系?

核心数据,如何从关系集合中删除一个元素(NSSet)

核心数据。如何组织两个源之间的关系。 (一个有另一个使用的图像的网址)