核心数据:提取请求中的抽象实体

问题描述

| 假设我有一个带有名为\“ Animal。\”的抽象实体的Core Data模型,然后,我还有许多从该抽象实体继承的其他实体:\“ Lion \”,\“ Dog \”,\“ Cat \”,等等。(我不是在开发Zoo程序,但是这个类比对于我正在解释的问题非常有用!) 我想知道的是:通过执行以下操作,我可以一次获取“所有动物”吗:
NSFetchRequest *searchRequest = [[NSFetchRequest alloc] init];
[searchRequest setEntity:[NSEntityDescription entityForName:@\"Animal\" inManagedobjectContext:aContext]];

NSArray *matchedobjects = [aContext executeFetchRequest:searchRequest error:nil];
我了解在NSEntityDescription上有确定实体是否从另一个继承的方法。但是,有没有一种快速方法获取所有具有特定(抽象)类型的实体-在这种情况下为“动物”? 如果上述方法无效,那么最有效的方法是什么?谢谢!     

解决方法

        您绝对可以使用该方法。 从Apple的核心数据编程指南中:   实体继承的工作方式与类继承类似。并且出于相同的原因很有用。如果您有许多相似的实体,则可以将通用属性分解为超实体,也称为父实体。您可以在一个实体中定义它们,而不是在多个实体中指定相同的属性,并且子实体继承它们。例如,您可以定义一个具有firstName和lastName属性的子实体,以及继承这些属性的Employee和Customer子实体。     ,        我做了类似的事情,但是那个实体不是抽象的。它是一个标准实体(没有实例),而我获取的其他实体都来自该实体。我还没有尝试使用抽象类,但是,查看文档似乎似乎不可能:   核心数据编程指南      您可以指定抽象实体   实体是抽象的-即   您将不会创建任何实例   该实体。您通常会   实体摘要(如果有数字)   全部代表的实体   (从)继承的专业化   不应本身的共同实体   被实例化。例如,在   绘图应用程序,您可能有   定义属性的图形实体   用于x和y坐标,颜色和   绘图范围。不过你永远不会   实例化图形。具体   图形的子实体可能是   圆,TextArea和线。 我的建议是使用抽象的Animal实体进行设置并尝试一下。如果它不起作用,则只需使Animal实体成为非抽象类(单词使我失望,那是我们所说的吗?也许“ concrete”更好?),您应该没事。如果有人使用抽象类完成了此操作,我会听到它的信息。