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

Core data CoreData与属性的多对多关系。插入、删除、请求,core-data,swift,Core Data,Swift,我对CoreData有以下问题,我找不到任何关于它的教程。问题是我在两个实体之间有一个多对多的关系:站点和程序。一个给定的电台可以分配多个节目,一个给定的节目可以分配给多个电台。在中间,时间与关系相关。因此,元组站程序具有与时间相关联的属性。环顾四周后,我发现最好的解决方案是创建一个中间实体,我称之为TimeStationProgram: Station>TimeStationProgram我稍微修改了您的ERD,在Station和Program之间添加了一个额外的关系,假设您希望执行以下操作:

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


Station>TimeStationProgram我稍微修改了您的ERD,在Station和Program之间添加了一个额外的关系,假设您希望执行以下操作:给定一个站点,向我显示所有程序,反之亦然。此外,我将电台/节目和TimeStationProgram之间的关系更改为1:1,因为您在单个电台和单个节目之间只有1次关系,即您不会有多个节目在同一电台上可用

现在,上面提到的每个项目都是一个“对象”。因此,在开始创建和关联对象时,需要考虑对象

// 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个对象中的每一个。您需要确定应该关联哪些对象,然后需要收集这些对象并通过它们的关系将它们映射到彼此。我上面使用的示例过于简单,我希望您的程序会更复杂。特别是处理获取现有程序并将其与电台关联的部分


注意:这不是完整的代码,但它应该描绘出一幅图画。

非常感谢!将Station/Program和TimeStationProgram之间的关系更改为1:1是一个很好的选择。我将尝试从这个ERD继续编码。谢谢我肯定需要一个多对多的关系:站点>TimeStationProgram Ok。检查实体的头文件,特别是TimeStationProgram。您应该会看到文件底部定义的一些助手方法,请参见上面的我的注释。这些用于将单个对象或“一组”对象添加到关系中。请参阅上面我的解决方案,并应用我所说的有关程序的内容。如果你使用多个,唯一真正改变的是你正在处理“集合”。例如//将TimeStationProgram映射到站点,如下所示:[dbEntityTimeStationProgram AddSationObject:dbEntityStation]