2016-05-12 141 views
0

Swift Core Data多对多关系,你如何保存关系。Swift核心数据多对多关系

让假设有2个实体事件和会员,一个事件可以有相关的许多成员和成员可以有许多事件......

所以

事件< < - >>会员

关系

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

你会如何保存这种关系?

回答

1

你不必任何代码,建立实体的事件和会员的好友:)之间的关系

您可以打开核心数据模型,选择事件实体,按住控制并拖动鼠标成员实体: )的关系会立即建立:)

现在选择的关系,它来自两个事件改变了许多许多会员(多到许多关系)和成员事件(反向关系):)

现在在Event和Member实体中适当地命名这些关系:)

像许多在事件一对多的关系被命名为involves_Members和会员实体相同的关系将被命名为involvedin_Events :)

现在,当您生成两个实体的模型类,你会发现

Events.h 

有一个属性名为involves_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]; 

OR

NSArray *membersArray = [event valueForKey:@"involves_Members"]; 

就是这样:)同样的事情适用于成员enity以及:)

TIP

你不想删除操作弄乱你的核心数据:)因此,选择关系involves_Membersinvolvedin_Events和d设置删除规则抵消

希望我做我的观点明确:)快乐编码好友:)

+0

谢谢您的明确答复。你有快捷版吗? – kupilot

+0

@ kupilot:抱歉的哥们没有imac与我现在会尝试明天提供你的代码:)但将此转换为swift应该是一个问题:)这是一个链接,我相信你可能已经看到它:)如果不是看看它:) https://www.raywenderlich.com/14742/core-data-on-ios-5-tutorial-how-to-work-with-relations-and-predicates我提到的一切都非常清楚地解释并在迅速:)希望它可以帮助你:) –