Cocoa-Touch – 更新多对多关系的核心数据
Posted
技术标签:
【中文标题】Cocoa-Touch – 更新多对多关系的核心数据【英文标题】:Cocoa-Touch – Core Data updating many-to-many relationships 【发布时间】:2012-01-30 12:20:23 【问题描述】:我有两个实体,一个叫Group
,另一个叫Contact
。他们有一个多对多的关系(至少一个)。因此,至少一个联系人可以属于一个或多个组,并且至少一个组可以属于一个或多个联系人。
Contact <<-->> Group
现在,当我想更新一个组时,我的视图控制器中有我的子类 NSManagedObject Group
可用。 (@property (nonatomic, strong) Group *selectedGroup;
)
假设组最初与 3 个联系人有关系,在我更新该组后,它应该有 2 个联系人(1 个原始联系人和 1 个新联系人)。
Before update After Update
Group Group
----- -----
ContactA ContactA
ContactB ContactD
ContactC
ContactA
应该保持不变。
这意味着应该从组中删除ContactB
关系(也应该从联系人实体中删除,因为没有其他组与ContactB
有关系)
ContactC
应该被创建。
我将如何处理这种情况?我无法让它工作。
【问题讨论】:
【参考方案1】:您是否为核心数据模型生成模型类?如果是这样,您应该在 Group 类中创建如下所示的 CoreDataGeneratedAccessors:
- (void)addContactObject:(Contact *)value;
- (void)removeContactObject:(Contact *)value;
然后您可以执行以下操作:
Group *group = ...
Contact *contactB = ...
Contact *contactC = ...
Contact *contactD = ...
[group addContactObject:contactD];
[group removeContactObject:contactB];
[group removeContactObject:contactC];
//save your context
【讨论】:
是的,我已经生成了模型类。所以我看到您的代码正在编辑特定组,但我没有看到与从联系人实体中完全删除ContactB
相关的任何内容?
鉴于它是多对多,我不知道您想完全删除该联系人(考虑到其他组可能与它相关)。只需从 managedobjectcontext 中删除该对象即可。以上是关于Cocoa-Touch – 更新多对多关系的核心数据的主要内容,如果未能解决你的问题,请参考以下文章