如何设置核心数据实体之间的关系?
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?”我不知道该怎么做......以上是关于如何设置核心数据实体之间的关系?的主要内容,如果未能解决你的问题,请参考以下文章