核心数据。无法根据与继承实体的关系来获取/排序实体

Posted

技术标签:

【中文标题】核心数据。无法根据与继承实体的关系来获取/排序实体【英文标题】:Core data. Can't fetch/sort entities based on the relationship to an inherited entity 【发布时间】:2013-12-04 12:10:44 【问题描述】:

[A][B].attribute

如果关系对象继承自抽象类,则无法根据关系属性获取/排序对象

NSSortDescriptor *titleSort = [[NSSortDescriptor alloc]initWithKey:@"b.attribute" ascending:YES];
[fetchRequest setSortDescriptors:@[titleSort]]; 


Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'keypath b.attribute not found in entity <NSSQLEntity A id=17>'

所以我们与 [B] 有“一对一”的关系,它有一些属性;

当我尝试通过 [B] 的“属性”获取 [A] 时,我遇到了崩溃。

这很奇怪,似乎 Core Data 不支持处理使用继承实体的键路径

你遇到过这个吗????

谓词也是如此 - 请帮助!!!

问问题,随心所欲

【问题讨论】:

这种关系不可能是B 而不是b 使其成为“B.attribute” 对不起,你什么意思? 在您的示例中,您声明 [A]>[B].attribute 但在您的排序描述符中,您使用 b.attribute 它实际上应该是 B.attribute 如果这不仅仅是伪代码。 是的,它只是伪代码。我这样做是为了简化情况。事实上,在“b.attribute”下,我的代码中有“mainEntity.date”键路径 这很奇怪,似乎Core Data不支持处理使用继承实体的keypath 【参考方案1】:

我不确定问题是 B 是继承的实体。 通常不能在第二层进行操作(在与实体 A 相关的另一个实体 B 上的属性上)。

基本上你应该分两步完成:

    检索所有B对象,按attribute排序 使用 for-each 循环从 B 对象中获取 A 对象(非常简单,因为您有一对一的关系)

【讨论】:

以上是关于核心数据。无法根据与继承实体的关系来获取/排序实体的主要内容,如果未能解决你的问题,请参考以下文章

核心数据谓词根据关系获取数据,错误为无法解析格式字符串

根据 Swift Core Data 中的关系获取与特定实体相关的所有条目

根据关系属性对获取请求进行排序

核心数据获取:按关系计数排序

使用核心数据的父实体继承和反向关系

根据核心数据中的属性对实体中的行进行排序