【发布时间】:2016-09-08 16:37:05
【问题描述】:
Swift Core Data 多对多关系,如何保存关系。
假设有 2 个实体 Event 和 Member,一个事件可以有多个关联的成员,一个成员可以有很多事件...
所以
活动>会员
关系
活动 - 活动 - 成员 会员 - 会员 - 活动
你将如何编写代码来保存这种关系?
【问题讨论】:
标签: ios core-data swift2 entity-relationship
Swift Core Data 多对多关系,如何保存关系。
假设有 2 个实体 Event 和 Member,一个事件可以有多个关联的成员,一个成员可以有很多事件...
所以
活动>会员
关系
活动 - 活动 - 成员 会员 - 会员 - 活动
你将如何编写代码来保存这种关系?
【问题讨论】:
标签: ios core-data swift2 entity-relationship
你不需要任何代码来建立实体Event和Member buddy之间的关系:)
您可以打开核心数据模型,选择Event实体,按住控件并将鼠标拖到Members实体上:)关系将立即建立:)
现在选择从事件到成员(多对多关系)和成员到事件(反向关系)的关系将其更改为多对多:)
现在在 Event 和 Member 实体中适当地命名这些关系:)
事件中的Like Many to Many 关系被命名为incoming_Members,而Member 实体中的相同关系将被命名为incomingin_Events :)
现在,当您为两个实体生成模型类时,您会发现
Events.h
有一个名为 requires_Members 的属性,其类型为 NSSet
类似
`Members.h`
有一个名为 involvedin_Events 的属性,它的类型也是 NSSet :)
现在假设如果您想将成员添加到事件中,您所要做的就是
创建一个成员对象
[context performBlock:^{
Member *member = (Member *)[NSEntityDescription insertNewObjectForEntityForName:@"Member" inManagedObjectContext:context];
[member setValue:@"yourValue" forKey:@"yourkey"];
//after populating it with appropriate value set the relationship with event :)
//get the event to which you want to set the relationship with member using NSFetchRequest :)
//assuming you have event object with you
NSMutableSet *involvedMembers = [event mutableSetValueForKey:@"involves_Members"];
[involvedMembers addObject:member];
[event setValue:involvedMembers forKey:@"involves_Members"];
//thats it you are done now
//save the context now :)
NSError *error;
[context save:&error];
}];
当您想要访问所有参与和事件的成员时,您所要做的就是使用 NSFecthRequest 获取事件对象 :) 获得事件对象后,您可以使用以下方法访问其所有成员,
NSArray *membersArray = [event.involves_Members allObjects];
或
NSArray *membersArray = [event valueForKey:@"involves_Members"];
就是这样 :) 同样的事情也适用于成员实体 :)
提示
您不希望删除操作弄乱您的核心数据 :) 所以选择关系 involves_Members 和 involvedin_Events 并将删除规则设置为 Nullify
希望我能说清楚 :) 快乐的编码伙伴 :)
【讨论】: