时间:2015-05-18 10:14:19

标签: ios core-data group-by xmppframework

在核心数据中,我有两个实体。 XMPPUserCoreDataStorageObject& XMPPGroupCoreDataStorageObject。

XMPPUserCoreDataStorageObject有一个属性,它包含一个XMPPGroupCoreDataStorageObject数组(@property(非原子,强)NSSet *组;)

XMPPGroupCoreDataStorageObject还有一个属性,它包含一个XMPPUserCoreDataStorageObject数组(@property(非原子,强)NSSet *用户;)

我想通过XMPPGroupCoreDataStorageObject查询XMPPUserCoreDataStorageObject。这是多对多映射。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:2)

您不能按多对多关系进行分组,因为子实体(在您的情况下为User)会多次出现。

相反,请按照您想要分组的内容(Group来获取)。用于在例如显示这些在表视图中,使用获取的组填充表视图节标题,并在表视图行中显示关联的User

答案 1 :(得分:2)

如果能够修改数据模型,另一个解决方案是实现一个中间实体来建模多对多关系。所以而不是:

User <<<--->>> Group

你会有

User <--->>> GroupMember <<<---> Group

然后,您可以将获取基于GroupMember实体。由于这与UserGroup之间存在一对一关系,因此您可以使用NSFetchedResultsController进行分组,sectionNameKeyPath设置为“group.groupName”(或无论属性如何),然后根据user关系的属性(例如user.userName)填充表格视图。但缺点是创建和删除关系涉及插入/删除GroupMember对象的更多工作。