问题描述
|
假设我有一个带有名为\“ 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”更好?),您应该没事。如果有人使用抽象类完成了此操作,我会听到它的信息。