如何设置核心数据实体之间的关系?

Posted

技术标签:

【中文标题】如何设置核心数据实体之间的关系?【英文标题】:How to set the relationship between the core data entities? 【发布时间】:2018-04-11 12:22:43 【问题描述】:

所以,我有一个核心数据数据库,其中已经填充了数据的多个关系。我的问题是我创建了表之间的关系,但我不知道如何在代码中设置它们。我只需要设置一个,然后我就可以为其余的人弄清楚。 例如:Colleges 具有“has Groups”的关系,因为一所大学有许多组。 Groupe 表具有“bellongsToColegiu”关系,因为一个或多个组在一所大学中。

我知道,我必须设置“.bellongsToCollegiu = Colegiu?”或“.hasGrupe = Grupe?”但我不知道如何正确获取学院。

目前我的数据库中只有一所大学。

有人可以帮我解决这个问题吗?这几天我一直在敲我的头,一无所获。

谢谢你,祝你有美好的一天!

【问题讨论】:

您是否尝试在实体之间创建新关系将实体分配给现有关系? 我正在尝试在实体之间创建新关系。我有表格中的所有数据,但我无法正确使用它,因为我没有设置它们之间的关系。 How to create relationship programmatically 创建关系后,您仍然需要分配实体以成为关系的一部分。 看起来您已经在模型中设置了关系,但需要将实体分配给关系。 【参考方案1】:

当您创建实体和它们之间的关系时,Xcode 还会生成处理这些关系的代码。处理关系的代码的命名模式是

    与一对一关系的关系名称相同 addToX 和 removeFromX(x 是关系)用于多对关系。

因此,您应该在 College 上拥有例如 addToHasGrupe(_ value: Grupe) 并且可以向其中添加组实例,并且 Grupe 应该具有可以设置为大学实例的 belongsToColegiu 属性。自动补全应该对您有所帮助。

【讨论】:

非常感谢。最后我想通了。如果我把关系只放在一种方式上可以吗?或者我必须把它从两个实体中拿出来?祝你今天过得愉快 !例如:如果我放入属于ToColegiu 的Groups 实体,就足够了吗?或者我必须把反比关系(addToHasGrupe)? 是的,一种方式就足够了,因为您定义了反向关系,Core Data 会为您处理其余的事情。【参考方案2】:

您可以从数据库中获取现有的“Colegiu”或创建一个新的。对于获取和创建新的,您需要一个托管对象上下文。托管对象上下文是数据堆栈的最后一部分,它具有 3 个组件,包括 1. 持久性存储、2. 持久性存储协调器和 3. 托管对象上下文。

创建堆栈的方法如下: https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/CoreData/InitializingtheCoreDataStack.html

然后你可以创建一个新对象:

let newItem = NSEntityDescription.insertNewObject(forEntityName: 'Colegiu',
                                                          into: 'reference to managed object context here')

或者您可以通过在托管对象上下文上调用 fetch 来搜索现有的,

请记住,CoreData 是一个复杂的主题,需要时间来解决问题。祝一切顺利。

【讨论】:

我已经创建了上下文。有了上下文,我保存了数据。 let context = (UIApplication.shared.delegate as! AppDelegate).persistentContainer.viewContext . 获取请求给了我一个像这样的数组“[Colegiu]” .belongsToColegiu 属性需要是tipe“Colegiu?”我不知道该怎么做......

以上是关于如何设置核心数据实体之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章

实体之间的核心数据关系

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

核心数据关系

核心数据模型 - 关系

如何创建从一个实体到另一个现有实体的核心数据关系?

从具有实体之间关系的核心数据中获取数据[重复]