核心数据关系可以有多个目的地吗?

Posted

技术标签:

【中文标题】核心数据关系可以有多个目的地吗?【英文标题】:Can a core data relationship have multiple destinations? 【发布时间】:2015-01-27 03:29:36 【问题描述】:

我有一个具有两个属性的通用类:名称和对象。 objects 属性可以有几种不同类型的自定义对象。

有没有办法在 objects 属性上设置一对多关系,以便它可以包含几种不同类型的对象?

我知道我可以使用 NSArchiver 和可转换类型,但我想知道是否还有其他方法。

【问题讨论】:

为什么你需要用一个关系来做?什么样的自定义对象?这些基本类型的集合,比如 Ints/Strings,......然后我会为每种类型的对象创建一个实体。拥有很多一对多的关系是没有问题的。如果它们包含更多自定义类型,那么我会重新考虑您的方法。我尽量不让 Core Data 生气。 我会尽力解释。我有 ClassA 和属性 arrayB; arrayB 包含 ClassC 的实例。 ClassC 具有属性 arrayD。 arrayD 的每个实例都将具有 ClassE 或 ClassF 或 ClassG 的实例。问题是 arrayD 可能包含不同类的实例,而不仅仅是一个类。 如果您在保存之前放置一个开关并且只检查数组中的第一项,您可以将它们保存为三个核心数据实体之一。获取时,您只需获取所有三个,然后查看返回的内容。 我不知道该怎么做。现在我通过仅加载***对象(我上次评论中的 ClassA)从所有实体(这是我需要的)加载所有对象。 多关系且未归档的另一个胜利是您可以在这些对象上预测您的提取。如果不将二进制数据加载和处理到内存中,二进制数据对于未来的任何事情都是无用的。 【参考方案1】:

您可以与不同的子实体建立关系,因为对类实例的引用可以指向子类的实例。但不可能像id 那样与任何实例建立关系。

重要提示:子实体被建模到一个表中,使同级属性为空。这可能会导致一张非常大的桌子。

您可以使用两个属性来处理您的情况,而不是使用二进制数据(如果它是组合关系,则它不起作用),一个包含目标实体名称,一个类似于 id。当然,您需要额外的代码来解决这种关系。

【讨论】:

那么我可以有一个指向 ClassA 的一对多关系并用 ClassA 的子类填充它吗? 子实体,而不是子类!您始终可以使用其类或子类填充实体。但在磁盘上只有实体中描述的属性。 子实体?我不知道你可以创建一个? 我是这么认为的。 :-) 选择一个(子)实体并打开数据模型检查器。你会发现一个设置Parent Entity 好的,更多时间:是的,您可以插入CMAUserDefine 的子实体。

以上是关于核心数据关系可以有多个目的地吗?的主要内容,如果未能解决你的问题,请参考以下文章

试图设置核心数据关系导致崩溃

核心数据模型,游戏有赢家和输家,一个玩家有多场比赛?

核心数据 - 实体关系未按预期工作

抽象实体上的核心数据关系

核心数据对象比较

dd命令可以同时拷贝吗