Swift核心数据的多对多关系

时间:2016-05-12 17:30:21

标签: ios core-data swift2 entity-relationship

Swift Core Data多对多关系,你如何保存关系。

假设有2个实体Event和Member,一个事件可以有很多成员关联,一个Member可以有很多事件...

所以

活动<< - >>会员

关系

活动 - 活动 - 会员 成员 - 成员 - 活动

你如何编码保存这种关系?

1 个答案:

答案 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_Membersinvolvedin_Events并将删除规则设置为 Nullify

希望我明白我的观点:)快乐的编码伙伴:)