如何在 .xcdatamodel 的核心数据中建立多对多关系

How to make a many to many relationship in core data in the .xcdatamodel

大家好,下面的核心数据示例确实需要帮助 - objective-C IOS

实体1:人 属性:名称

实体 2:语言 属性:语言名称

例如姓名:约翰会说语言姓名:英语、韩语、日语

示例 2 是语言名称:约翰、艾米、阿什利说西班牙语、英语、韩语

第一个问题是如何在 xcdatamodel 中建立这种关系?

第二个问题是如何存储,例如约翰会说英语、韩语、日语进入核心数据?

第三是如何动态显示数据,例如

假设我有一个由 languageName 生成的按钮,当我点击它时应该在表格视图中显示所有说该语言的人?

我尝试了一种不同的方法,使用位移位并​​将运动存储在每一位中,并使用 while 循环来匹配它,但我已经阅读了一段时间,多对多关系似乎更合适。

感谢任何帮助,提前致谢!

我没有提供任何代码,因为我什至不知道从哪里开始。

要创建多对多关系,您需要创建两个对多关系并使它们互为倒数。

对于你的情况,你可以

  1. speaks 关系添加到 Person,以及
    • destination 设置为 Language
    • type设置为To Many
  2. spokenBy 关系添加到 Language,以及
    • destination设置为Person
    • inverse 设置为 speaks
    • type设置为To Many

通过正确设置inverse,您可以从一侧设置关系,Core Data 会自动处理另一侧,从而确保数据的一致性。例如,Mandy 会说英语和西班牙语。要将她所说的语言保存到您的核心数据存储中,只需执行以下操作:

// mandy, english and spanish are all NSManagedObject objects
mandy.speaks = [NSSet setWithObjects:english, spanish, nil];
NSLog(@"%@", [english.spokenBy containsObject:mandy] ? @"YES" : @"NO"); // YES

您可以收听 NSManagedObjectContextObjectsDidChangeNotification 以在您的托管对象发生更改(即插入、删除或更新)时收到通知。


有关详细信息,请参阅此 Apple Documentation