Ios 核心数据过滤器抽象实体

Ios 核心数据过滤器抽象实体,ios,core-data,ios7,Ios,Core Data,Ios7,我有以下核心数据设置: Issue (IssueField)IssueFields (to many, Abstracted) IssueField (String)type TextField : IssueField (String)text DateField : IssueField (Date)date 因此,实体发行与发行领域有着多方面的关系 IssueField是抽象的,有两个子TextField和DateField 我想运行一个谓词来查找在某个日期包含任何日期字段的问题

我有以下核心数据设置:

Issue 
(IssueField)IssueFields (to many, Abstracted)

IssueField
(String)type

TextField : IssueField
(String)text

DateField : IssueField
(Date)date
因此,实体发行与发行领域有着多方面的关系 IssueField是抽象的,有两个子TextField和DateField

我想运行一个谓词来查找在某个日期包含任何日期字段的问题

NSFetchRequest *request = [NSFetchRequest fetchRequestWithEntityName:@"Issue"];
request.predicate = [NSPredicate predicateWithFormat:@"any IssueFields.type = %@ and any IssueField.date = %@", @"DateType", today];
但我有一个错误: 原因:“在实体中找不到keypath IssueField.date”


我知道这是因为查询试图在文本字段中查找日期,但如何解决此问题?

核心数据实体不是对象。这样的抽象不应该被使用

首先,当您使用这样的抽象实体和/或实体继承时,所有子对象都将存在于SQLite中的同一个表中。这可能并且确实会导致性能不佳


第二,核心数据不是数据库。数据库类型规范化也不适用。在您的情况下,您应该将两个实体TextField和DateField组合成一个实体。这将是一个相当简单的逻辑检查,以确定您正在处理的情况。

您的
IssueField
实体没有
date
属性,因为它是从
IssueField
继承的
DateField
。现在还不清楚你想达到什么目的,所以我不能真正评论解决这个问题的方法。为什么需要单独的
TextField
DateField
实体?(与将其作为
IssueField
properties不同?有一个单独的组件配置一个问题可以为一个项目提供多少字段,此结构允许问题字段在将来扩展以适应新的数据类型。因此,问题有一个IssueField列表,IssueField可以是文本字段或日期字段,还有一个值list字段、文档字段、数字字段等。Hmmm为什么不让一个
IssueField
实体具有属性
类型
和属性
。类型将存储字段类型,值将存储字段值。这也可能有帮助