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

时间:2016-06-04 07:58:36

标签: ios core-data many-to-many nsentitydescription

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

实体1:人 属性:名称

实体2:语言 属性:LanguageName

示例是姓名:John可以说LanguageName:英语,韩语,日语

示例2将是LanguageName:John,Amy,Ashley说西班牙语,英语,韩语

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

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

第三是如何动态显示数据

假如我有一个由languageName生成的按钮,当我点击它时,应该显示在tableview中说这种语言的每个人?

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

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

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

1 个答案:

答案 0 :(得分:0)

要创建多对多关系,您需要创建两对多关系并使它们彼此相反。

在您的情况下,您可以

  1. speaks添加Person关系,并且
    • destination设为Language
    • type设为To Many
  2. spokenBy添加Language关系,并且
    • destination设为Person
    • inverse设为speaks
    • type设为To Many
  3. 通过正确设置inverse,您可以从一侧设置关系,Core Data将自动处理另一方,从而确保数据的一致性。例如, Mandy 可以说英语和西班牙语。要将她说出的语言保存到您的Core Data商店中,只需执行以下操作:

    // 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