假设我有一群人。每个人都可以有一个同伴(大多数时候都会有一个同伴)。这种陪伴负责与其他人建立友谊。一个人只能通过一种陪伴而成为友谊。
例如我们有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
),但我真正想要的是让 Core Data 照顾这种关系本身。
有没有办法让 Core Data 自动保留这种关系?