【问题标题】:Swift core data many-to-many relationshipSwift核心数据多对多关系
【发布时间】:2016-09-08 16:37:05
【问题描述】:

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

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

所以

活动>会员

关系

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

你将如何编写代码来保存这种关系?

【问题讨论】:

    标签: ios core-data swift2 entity-relationship


    【解决方案1】:

    你不需要任何代码来建立实体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_Membersinvolvedin_Events 并将删除规则设置为 Nullify

    希望我能说清楚 :) 快乐的编码伙伴 :)

    【讨论】:

    • 感谢您的明确回复。你有 swift 版本吗?
    • @kupilot : 抱歉,哥们我现在没有 imac,明天会尝试为您提供代码 :) 但是将其转换为 swift 应该不是问题 :) 这是我相信您可能有的链接看过 :) 如果没有,请看一下 :) raywenderlich.com/14742/… 我提到的一切都解释得很清楚,而且很快 :) 希望对你有帮助 :)
    猜你喜欢
    • 2016-06-30
    • 1970-01-01
    • 2016-05-24
    • 2011-02-18
    • 1970-01-01
    • 2018-08-11
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多