如何在 iOS 中建立多对多关系? (核心数据)

Posted

技术标签:

【中文标题】如何在 iOS 中建立多对多关系? (核心数据)【英文标题】:How do I set up a many-to-many relationship in iOS? (Core Data) 【发布时间】:2014-05-01 02:13:43 【问题描述】:

我对核心数据比较陌生,并且经常使用一对多关系。然而,我目前处于多对多关系有意义的情况。我有用户和组,用户可以有很多组,组会有很多用户。然而我突然想到我不知道如何设置它。

要将用户添加到组中,我通常会执行类似...

Group *group = [NSEntityDescription
                        insertNewObjectForEntityForName:@"Group"
                        inManagedObjectContext:_managedObjectContext];
group.user = myUser;

但现在我有group.users(复数),我不知道我应该用什么来填充它。它应该是带有我的用户对象的NSArray 吗?如果是这样,这是否意味着每次我想添加一个新用户时,我首先必须获取所有当前用户,将其放入一个数组中,用新用户更新该数组,然后分配它group.users

我无法想象我不得不做这么荒谬的事情;有人能给我一个关于如何建立多对多关系的基本解释吗?

【问题讨论】:

【参考方案1】:

一对多关系的值是NSSet,而不是NSArray。但是你可以使用 生成的 Core Data 访问器方法将元素添加到一对多关系。 例如:

User *user = ...;
Group *group = ...;

// Add user to group:
[group addUsersObject:user];  // (1)
// Or, alternatively, add group to user:
[user addGroupsObject:group]; // (2)

(你可以做 (1) 或 (2)。如果关系被定义为 inverse 关系 彼此之间,一个自动暗示另一个。)

【讨论】:

是的,我想通了。终于要开始更新这个了,但我想我不需要。【参考方案2】:

您可以使用 NSDictionary 或 NSMutableDictionary 将您的对象保存在 nn 关系中。

【讨论】:

【参考方案3】:

Apple 开发者网站上的 Core Data Programming Guide 非常详尽。在下面的链接中,页面中间有一个部分介绍了如何创建多对多关系。

https://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/CoreData/Articles/cdRelationships.html#//apple_ref/doc/uid/TP40001857-SW10

【讨论】:

链接可以作为补充信息,但link-only answers are strongly discouraged。答案实际上应该回答问题,而不仅仅是提供有关如何调查或在哪里找到有用信息的一般提示和指示(此类内容可以发布为comments。请包含链接信息的摘要与问题相关,并解释它如何解决问题。 好的,谢谢。我已经使用该网站有一段时间了,但刚刚开始发表评论。 我已经读过了。页面上没有任何地方显示如何在多对多关系中实际添加和删除对象。

以上是关于如何在 iOS 中建立多对多关系? (核心数据)的主要内容,如果未能解决你的问题,请参考以下文章

从具有多对多关系核心数据iOS的上下文中删除nsmanagedboject

将对象添加到具有多对多关系的核心数据中的 NSSet

核心数据和多对多

预加载具有多对多关系的核心数据的最佳实践

向核心数据添加记录时出现 NSSet 错误(多对多关系)

CoreData:如何建模循环多对多关系