如何创建源列表以将核心数据显示到多个关系?
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:
和每个实体的不同视图。以上是关于如何创建源列表以将核心数据显示到多个关系?的主要内容,如果未能解决你的问题,请参考以下文章