Swift Core Data多对多关系,你如何保存关系。
假设有2个实体Event和Member,一个事件可以有很多成员关联,一个Member可以有很多事件...
所以
活动<< - >>会员
关系
活动 - 活动 - 会员 成员 - 成员 - 活动
你如何编码保存这种关系?
答案 0 :(得分:1)
你没有任何代码来建立实体事件和成员伙伴之间的关系:)
您可以打开核心数据模型,选择Event实体,按住控件并将鼠标拖到Members实体上:)将立即建立关系:)
现在选择关系从事件到成员(多对多关系)和成员到事件(反向关系)将其更改为多对多:)
现在恰当地在Event和Member实体上命名这些关系:)
像事件中的多对多关系被命名为involved_Members,成员实体中的相同关系将被命名为involvedin_Events:)
现在,当您为两个实体生成模型类时,您将找到
Events.h
有一个名为involved_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"];
那就是:)同样的事情也适用于成员enity:)
提示强>
你不希望删除操作弄乱你的核心数据:)所以选择关系involves_Members
和involvedin_Events
并将删除规则设置为 Nullify
希望我明白我的观点:)快乐的编码伙伴:)