CoreData与属性的多对多关系。插入,删除,请求

时间:2014-09-08 11:45:16

标签: core-data swift

我对CoreData有以下问题,我找不到任何处理它的教程。问题是我在两个实体之间有多对多的关系:Station和Program。给定的站可以分配许多程序,并且可以将给定的程序分配给许多站。在中间,时间与关系有关。因此,元组站程序具有关联的属性时间。环顾四周后,我发现最好的解决方案是创建一个中间实体,我称之为TimeStationProgram:

电台< - >> TimeStationProgram<< - >程序

我可以正常创建Station和Program的实例。但是,我不知道如何创建新实体TimeStationProgram的特定实例。我也不知道如何删除或恢复特定数据。谢谢!

Objective-C中的代码也是受欢迎的。

1 个答案:

答案 0 :(得分:0)

我已经修改了你的ERD了一点,在Station和Program之间添加了一个额外的关系(假设你想做的事情:给一个站点,给我看所有的程序,反之亦然)。此外,我将电台/节目和TimeStationProgram之间的关系更改为1比1,因为您在单个电台和单个节目之间只有1次时间关系(即,您不会多次执行该程序可以在同一个车站上获得)

enter image description here

现在,上面提到的每个项目都是'对象'。因此,您需要在开始创建对象时考虑对象并将它们关联在一起。

// Create the instances

// create a Station
 Station *dbEntityStation = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"Station"
                                  inManagedObjectContext:[self.managedObjectContext]];

// create a Program
 Program *dbEntityProgram = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"Program"
                                  inManagedObjectContext:[self.managedObjectContext]];

// create a TimeStationProgram
 TimeStationProgram *dbEntityTSP = [NSEntityDescription
                                  insertNewObjectForEntityForName:@"TimeStationProgram"
                                  inManagedObjectContext:[self.managedObjectContext]];

// Handle the relationships

// Map Station to TimeStationProgram
dbEntityStation = dbEntityTSP;

// Map Program to TimeStationProgram
dbEntityProgram = dbEntityTSP; // note same TSP instance for both Station & Program

// Map Station to Program
[dbEntityStation addProgramsObject:dbEntityProgram]
// if you wanted to add multiple Program(s) to a Station you would need to load them into a set then add as follows
// NSMutableSet *programs = [NSMutableSet new];
// <load up the set with Program(s)
// [dbEntityStation addPrograms:programs];

关键是你需要创建所提到的3个对象中的每一个。您需要确定应关联哪些对象,然后您需要收集这些对象并通过它们的关系将它们相互映射。我上面使用的例子很简单,我希望你的程序会更复杂。特别是涉及获取现有程序并将它们与站点相关联的部分。

注意:这不是代码完整的,但应绘制图片。