如何在 NSFetchedResultsController 中使用多对多关系?

Posted

技术标签:

【中文标题】如何在 NSFetchedResultsController 中使用多对多关系?【英文标题】:How to use many to many relationship in NSFetchedResultsController? 【发布时间】:2011-03-30 13:47:54 【问题描述】:

我有两个实体组和联系人。一个联系人可以属于多个群组,一个群组有多个联系人。所以我创建了多对多的关系。像这样:

Group           Contact
attribute       attribute
  gname           name
  gid             gender
relationship    relationship
  cnt<<--------->>grp

我想在 UITableView 中显示所有联系人,其中有很多部分,每个部分有很多行。像这样:

GroupA
  Contact1
  Contact2
  Contact3
GroupB
  Contact1
  Contact3
GroupC
  Contact2
  Contact3

我的问题是如何创建 NSFetchedResultsController 来实现这一点?我可以使用属性将 UITableView 划分为多个部分。我曾尝试使用简单对多的关系来划分它,但失败了,至于多对多,我...

如果我有一个名为“GroupD”的组,该组没有联系人属于。所以联系人实体没有任何grp属性包含“GroupD”的行,那么我只有三个部分。我希望我的 UITableView 是这样的:

GroupA
  Contact1
  Contact2
  Contact3
GroupB
  Contact1
  Contact3
GroupC
  Contact2
  Contact3
GroupD

但我确实得到了:

GroupA
  Contact1
  Contact2
  Contact3
GroupB
  Contact1
  Contact3
GroupC
  Contact2
  Contact3

我认为最大的问题是我创建 NSFetchedResultsController 的方式。

请帮忙。

任何回复将不胜感激,在此先感谢。

【问题讨论】:

【参考方案1】:

我认为 UITableView 不可能显示没有单元格的部分。如果你能接受这个事实,那么你的 NSFetchResultController 应该如下所示。

NSFetchRequest *fetchRequest = ....
NSEntityDescription *entity = .... @"Contact" ....
fetchRequest.entity = entity;

[NSFetchResultsController alloc] initWithFetchRequest:fetchRequest
                                   ...
                                   sectionNameKeyPath:@"grp"
                                   ...

【讨论】:

以上是关于如何在 NSFetchedResultsController 中使用多对多关系?的主要内容,如果未能解决你的问题,请参考以下文章

又一个 NSInternalInconsistencyException,但使用 NSFetchedResultsController

更新相关 NSManagedObject 时更新 UITableView

Core Data 中计算的持久属性

NSFetchedResultsController:具有相同键的两个排序描述符不起作用。一个降序用于部分,另一个升序用于行

如何在图像中找到明亮区域(以及如何在图像中找到阴影区域)

在QGIS中如何添加天地图的WMTS