让我们说我有一群人。每个人都可以有一个伴侣(大部分时间都会有伴侣)。这种陪伴是负责帮助其他人的朋友。一个人只能通过一次友谊来友谊。
e.g。我们有John, Tom, Mary, Paul, Peter, Frank and Wil
Peter - Tom Paul - Mary Wil - John Frank -
|_Paul |_Wil
|_John |_Peter
|_Tom
Mary
和Frank
并非任何人友好关系。 Frank
没有伴侣。
我设置了以下关系:
Person
Relationship Destination Inverse Type Delete Rule
companion Person companion To One Nullify
friendshippedBy Person friendships To Many Nullify Count 2 Maximum
friendships Person friendshippedBy To Many Nullify
我可以找到彼得的同伴,彼得的友谊,彼得的友谊,彼此没有同伴的人,不是朋友,也不是友谊的朋友。这一切都很好,它是我需要的一切,除了我需要自己处理一些数据完整性:我必须确保只要彼得是汤姆的伴侣,彼得和汤姆友谊是同一个人(friendships
关系应该两者都相同)。
我必须将这些关系设置为:
peter.friendships = [NSSet setWithArray:@[paul, john]];
tom.friendships = peter.friendships; // need to preserve it as long as they're companions
我希望每次陪伴中的一个人friendships
关系发生变化时,都要避免写最后一行。
我认为我可以在类别上编写便捷方法(我仍然必须确保直接调用该方法而不是.friendships =
或者我必须覆盖setFriendships
),但是我和我#39; d真的很想让Core Data自己处理这种关系。
有没有办法让Core Data自动保留这种关系?
答案 0 :(得分:1)
而不是复制"友谊"对于所有"同伴",你可以介绍一个 中间实体"连接"存储同伴和普通朋友:
(并设置"同伴的最大值"与2的关系)。
然后
person.companionConnection.friendships
是给定person
的朋友,person.companionConnection.companions
是一个包含给定person
和他的person.friendshipConnection = nil
的集合
伴侣,答案 1 :(得分:0)
不,没有“自动复制”功能。使用覆盖setFriendships
的选项。您还可以使用KVO来触发更新。另一种可能性是不重复关系,而是添加一个方法,该方法创建两个人的关系的并集并返回(取决于您想要使用关系内容的内容)。