在核心数据中,我有两个实体。 XMPPUserCoreDataStorageObject& XMPPGroupCoreDataStorageObject。
XMPPUserCoreDataStorageObject有一个属性,它包含一个XMPPGroupCoreDataStorageObject数组(@property(非原子,强)NSSet *组;)
XMPPGroupCoreDataStorageObject还有一个属性,它包含一个XMPPUserCoreDataStorageObject数组(@property(非原子,强)NSSet *用户;)
我想通过XMPPGroupCoreDataStorageObject查询XMPPUserCoreDataStorageObject。这是多对多映射。
我怎样才能做到这一点?
答案 0 :(得分:2)
您不能按多对多关系进行分组,因为子实体(在您的情况下为User
)会多次出现。
相反,请按照您想要分组的内容(Group
来获取)。用于在例如显示这些在表视图中,使用获取的组填充表视图节标题,并在表视图行中显示关联的User
。
答案 1 :(得分:2)
如果能够修改数据模型,另一个解决方案是实现一个中间实体来建模多对多关系。所以而不是:
User <<<--->>> Group
你会有
User <--->>> GroupMember <<<---> Group
然后,您可以将获取基于GroupMember
实体。由于这与User
和Group
之间存在一对一关系,因此您可以使用NSFetchedResultsController
进行分组,sectionNameKeyPath
设置为“group.groupName”(或无论属性如何),然后根据user
关系的属性(例如user.userName
)填充表格视图。但缺点是创建和删除关系涉及插入/删除GroupMember
对象的更多工作。