Swift核心数据多对多关系
问题描述:
Swift Core Data多对多关系,你如何保存关系。Swift核心数据多对多关系
让假设有2个实体事件和会员,一个事件可以有相关的许多成员和成员可以有许多事件......
所以
事件< < - >>会员
关系
活动 - 活动 - 会员 会员 - 会员 - 活动
你会如何保存这种关系?
答
你不必任何代码,建立实体的事件和会员的好友:)之间的关系
您可以打开核心数据模型,选择事件实体,按住控制并拖动鼠标成员实体: )的关系会立即建立:)
现在选择的关系,它来自两个事件改变了许多许多会员(多到许多关系)和成员事件(反向关系):)
现在在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_Members
和involvedin_Events
和d设置删除规则抵消
希望我做我的观点明确:)快乐编码好友:)
谢谢您的明确答复。你有快捷版吗? – kupilot
@ kupilot:抱歉的哥们没有imac与我现在会尝试明天提供你的代码:)但将此转换为swift应该是一个问题:)这是一个链接,我相信你可能已经看到它:)如果不是看看它:) https://www.raywenderlich.com/14742/core-data-on-ios-5-tutorial-how-to-work-with-relations-and-predicates我提到的一切都非常清楚地解释并在迅速:)希望它可以帮助你:) –