iOS 核心数据分组依据

iOS core data group by

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

XMPPUserCoreDataStorageObject 有一个 属性,其中包含一个 XMPPGroupCoreDataStorageObject (@属性 (nonatomic, strong) NSSet * groups;)

数组

XMPPGroupCoreDataStorageObject 也有一个 属性,其中包含一个 XMPPUserCoreDataStorageObject 数组 (@属性 (nonatomic, strong) NSSet* users;)

我想查询按XMPPGroupCoreDataStorageObject分组的XMPPUserCoreDataStorageObject。这是多对多映射。

我怎样才能做到这一点?

您不能按 many-to-many 关系分组,因为 child 实体(在您的情况下为 User)会出现不止一次。

取而代之的是,按您要分组的内容进行获取(在您的情况下为Group)。用于在例如中显示这些table 视图,使用获取的组填充 table 视图部分 headers,并在 table 视图行中显示关联的 User

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

User <<<--->>> Group

你会

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

然后您可以根据 GroupMember 实体进行提取。由于这与 UserGroup 都有一对一的关系,您可以使用 NSFetchedResultsController 进行分组,将 sectionNameKeyPath 设置为 "group.groupName"(或任何属性),然后根据 user 关系的属性(例如 user.userName)填充 table 视图。但缺点是创建和删除关系需要更多工作 inserting/deleting GroupMember 对象。