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

Posted

技术标签:

【中文标题】使用核心数据的父实体继承和反向关系【英文标题】:Parent entity inheritance and inverse relationships using core data 【发布时间】:2012-08-30 16:20:51 【问题描述】:

我对核心数据有点陌生,目前正在尝试利用父实体。 现在,我有这种模型

实体:

ThemePark -> hasAttractions(一对多关系)

WaterPark -> hasAttractions(一对多关系)

Attractions -> inThemePark(hasAttractions 的反比关系)

Attractions -> inWaterPark(hasAttractions 的反比关系)

我想要的是一个父实体,比如说 GenericPark,它具有属性“hasAttractions”,但我不确定应该如何定义反向关系。

如果我执行以下操作

Attractions -> inGenericPark(GenericPark 中 hasAttractions 的倒数)

我如何确定 GenericPark 是水上乐园还是主题乐园?

在使用父实体的同时我应该如何修改这个模型?

提前致谢!!!

【问题讨论】:

【参考方案1】:

每个NSManagedObject 实例,无论您是否定义了自定义子类,都有一个关联的NSEntityDescription,它将告诉您它是什么类型的对象。只需在有问题的托管对象上调用-entity

例如:

if ([@"WaterPark" isEqualToString:[[somePark entity] name]]) 
  // do watery things

【讨论】:

【参考方案2】:

您应该为数据模型检查器中的每个实体分配一个自定义类(可以与实体同名),并为每个实体创建 NSManagedObject 子类(如果您还没有这样做的话)。

那么ThemeParkWaterPark 都是GenericParc 的子类,您可以测试GenericParc 对象,例如与

if ([genericParc isKindOfClass:[ThemeParc class]]) 
    // It is a ThemePark:
    ThemeParc *themePark = (ThemeParc *)genericPark;
    // ... 

【讨论】:

以上是关于使用核心数据的父实体继承和反向关系的主要内容,如果未能解决你的问题,请参考以下文章

核心数据继承 - 管理子类的反向关系

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

NSFetchedResultsController 和实体继承

将子实体附加到核心数据 iOS Swift 中的实体

核心数据继承与无继承

核心数据继承:这样做可以吗?