NSFetchedResultsController、sectionNameKeyPath 和无数据日期的部分

Posted

技术标签:

【中文标题】NSFetchedResultsController、sectionNameKeyPath 和无数据日期的部分【英文标题】:NSFetchedResultsController, sectionNameKeyPath, and sections for dates without data 【发布时间】:2013-08-14 18:09:52 【问题描述】:

我有一个UITableViewController,在 ios 上使用 Core Data 数据源。这些项目是按日期排序的事件。我已经在使用sectionNameKeyPath 按日期将事件拆分为多个部分。一切都很好。

我想为数据库中不存在数据的日期添加部分标题。例如:

-August 14-
Event One
Event Two
-August 15-
-August 16-
Event Three

由于在上述示例中不存在 8 月 15 日的事件,因此目前不显示 8 月 15 日的部分标题。我希望它出现。

我考虑过在没有事件发生的日期中包含“模拟”对象,而不是在表格中的行中显示它们。可能,但有很多额外的处理(所有行高都需要在显示之前计算 - 这很容易有数千个对象)。另一种选择是在所有部分中包含一个模拟对象,我可以在所有行中平均补偿(更少的处理)。这应该可行,但我真的对用模拟对象来垃圾我的数据库不感兴趣。

有什么更好的解决方法的建议吗?

【问题讨论】:

【参考方案1】:

不知道日期代表什么(当前日期或过去日期),此解决方案可能会或可能不会很好地工作。但是如何创建一个处理日期的表。然后与对象建立一对多关系:日期 > 事件。

然后,当应用启动时,您可以添加所需的日期。然后获取的控制器只是拉出日期表中的所有日期,这些可能是部分。对于行,您可以只访问日期的事件。

现在我从中看到的主要缺点是您可能无法从获取的控制器中获得最佳功能,尽管每次访问关系时信息都应该是最新的。除此之外,我想不出一个顺利的解决方案,但我个人对将垃圾数据添加到我的数据库中持谨慎态度。

【讨论】:

我的脑后也有这个大致的想法。我还没有深入研究 NSFetchResultsController 上的一对多关系。控制器应该能够以这种方式提取所有事件记录,还是我需要为每个部分手动提取它们(单独的获取请求)? @MitchCohen 不,您可以访问此信息的关系 dateObject.events 将为您提供该日期的所有事件(假设您以这种方式设置核心数据模型)。你真的需要 FetchedResultController 的日期功能吗?

以上是关于NSFetchedResultsController、sectionNameKeyPath 和无数据日期的部分的主要内容,如果未能解决你的问题,请参考以下文章

在 Core Data 应用程序中调用 performFetch 后,是不是需要手动更新表视图?