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

Bry*_*yan 31 macos cocoa core-data objective-c

假设我有一个Core Data模型,其中包含一个名为"Animal" 的抽象实体.然后,我有许多其他实体从这个抽象实体继承:"狮子","狗","猫"等(我不是在开发一个动物园程序,但这个类比适用于我正在解释的问题!)

我想知道的是:我可以通过这样做一次取"所有动物":

NSFetchRequest *searchRequest = [[NSFetchRequest alloc] init];
[searchRequest setEntity:[NSEntityDescription entityForName:@"Animal" inManagedObjectContext:aContext]];

NSArray *matchedObjects = [aContext executeFetchRequest:searchRequest error:nil];
Run Code Online (Sandbox Code Playgroud)

我知道NSEntityDescription上有一些方法来确定一个实体是否继承自另一个实体.但是有没有一种快速的方法来获取特定(抽象)类型的所有实体 - 在这种情况下,"动物"?

如果上述方法无效,那么最有效的方法是什么?谢谢!

oct*_*cty 32

绝对可以使用这种方法.

来自Apple的核心数据编程指南:

实体继承的工作方式与类继承相似; 并且出于同样的原因是有用的.如果您有许多相似的实体,则可以将公共属性分解为一个超级实体,也称为父实体.您可以在一个实体中定义它们,而不是在多个实体中指定相同的属性,并且子实体继承它们.例如,您可以定义具有属性firstName和lastName的Person实体,以及继承这些属性的子实体Employee和Customer.