一个 UITableview 中的多个实体

Posted

技术标签:

【中文标题】一个 UITableview 中的多个实体【英文标题】:Multiple entities in one UITableview 【发布时间】:2014-01-11 15:55:21 【问题描述】:

我有一个数据模型,其中包含两个具有一对多关系的实体。让我们称他们为城市>人。

在我的表格视图中,我当前显示每个城市,按部分分隔(当前每个部分中有一个单元格)。

我有什么方法可以在相应部分添加与特定城市相关的每个人? (添加与连接到城市的人数一样多的单元格)

我使用两个不同的 fetchedResultsControllers 来访问实体,但不能完全弄清楚如何做到这一点。 最终我希望每个部分的第一个单元格成为一个城市,然后是该城市中的所有人。

任何帮助或正确方向的指针将不胜感激。

【问题讨论】:

你真的必须在一个单元格中显示每个城市吗?也许将城市显示为部分标题就足够了。这样,您将只需要处理一个 fetchedResultsController(用于 Person 实体),这将大大简化事情。 我确实需要能够显示所有单元格的详细视图,包括城市和人员。但是,如果这种方式更简单,也许我可以修改节标题以使其看起来像单元格,并且仍然能够以这种方式显示城市的详细视图。 您认为这会是一个更好的解决方案吗? @MichałCiuba 【参考方案1】:

正如 Michal 在 cmets 中提到的那样。更简洁的设计是让您的 City 实体显示在部分标题中(非常简单),并将部分中的人员对象作为行。

为此,您需要添加来自城市的唯一标识符作为NSFetchedResultsController 的部分路径。由于该属性采用关键路径,您可以指定类似city.name 的内容,它将通过人与人之间的关系解析并获得该值。

您唯一的其他选择是手动获取城市对象并构建您的UITableViewDatasource 以与您自己的数据结构对话。可行,但比 Michal 建议的要困难得多。

【讨论】:

现在的问题是,如果我只添加一个城市,NSFetchedResultsController 不会找到并将其添加到 tableview(作为 sectionheader),因为还没有建立关系。在用户添加人员之前,我需要能够显示城市。有没有办法在不使用第二个 fethedresultscontroller 的情况下检查这个? 不容易。表格并不意味着有一个没有行的部分。您可以解决它,但这很不愉快。 所以第二个 fetchedresultscontroller 是要走的路吗? 不,用户体验有缺陷。你不应该这样做违反了 HIG。我建议寻找另一种设计。

以上是关于一个 UITableview 中的多个实体的主要内容,如果未能解决你的问题,请参考以下文章

具有多个实体和 uitableview 的核心数据

无效更新:第 0 节 UITableView 中的行数无效

如何从核心数据中获取父实体的所有子实体,以及如何将父数据用作 UITableview

使用 Swift 从 UITableView 捕获多个值

滚动/调整 UITableView

UITableView 拉伸问题