核心数据断言 sectionNameKeyPath 重复出现的多对多关系
Posted
技术标签:
【中文标题】核心数据断言 sectionNameKeyPath 重复出现的多对多关系【英文标题】:Core Data Predicate a Many to Many relationship for sectionNameKeyPath reoccurrence 【发布时间】:2011-09-21 15:11:49 【问题描述】:我有一个看起来像这样的核心数据模型……
事件>日期
这个想法是一个事件可以有很多日期,一个日期可以有很多事件。我需要我的表格视图来列出带有显示日期的 SectionHeaders 的事件。
我的问题是我不知道如何设置,以便每次在 SectionHeader 中显示新日期时都可以重新发生事件。
当我设置我的谓词来收集每个事件的所有日期时,它不允许在 FRC 上设置 sectionNameKeyPath 时重复事件。
【问题讨论】:
【参考方案1】:与其使用多对多关系,不如只拥有事件对象的日期属性,然后只查找特定日期的所有事件吗?我想这可以使用NSPredicate
。
次要的缺点是您必须为每个重复发生的事件设置一个条目,并在更改时修改所有这些事件。从好的方面来说,这在功能上是有益的,因为它允许用户连续修改单个事件,或者取消/删除一个事件而不影响系列中的其余部分。
【讨论】:
不幸的是,这不适合我拥有的数据,这比我在问题中概述的更复杂。简而言之,每个事件的日期可以分为三个类别之一;一个单一的事件,一个不连续的日子或时间的事件,以及跨越一个范围的事件,开始和结束日期标记了这个范围。我知道如何将最后两个属性排列成集合,以便它们与一个事件相对应,但我无法规范化数据,以便每个节头根据需要将事件相乘。【参考方案2】:吉姆,
NSFetchedResultsController 仅限于单个实体。因此,许多复杂的查询是不可能的,或者需要使用子查询的复杂查询。根据我的经验,除非您的数据模型适合这种狭窄的设计,否则您将遇到麻烦。我退回到监听上下文并保存通知并处理更改或直接插入的对象。
安德鲁
【讨论】:
本应如此简单的事情却如此复杂,这似乎很奇怪。如果您在列表视图中查看日历应用程序,您会注意到跨日期范围的约会如何在每个部分标题下方重复,这实际上是我想要实现的目标。我可以对所有日期数据进行建模,但我不知道如何将其映射到节标题。我想我可以尝试创建一个日历并在没有关系的情况下针对该实体预测事件日期数据。 吉姆,我不同意。 Core Data 的做法与大多数其他数据库系统不同。在这种情况下,听起来您的数据模型不太适合 Core Data。通过一些简单的更改,它可能会更合适。例如,由于绑定和 NSFetchedResultsController 的工作方式,数据有时会在实体中重复。您可能必须这样做才能呈现您的日历。安德鲁 我不确定我是否关注你。我的问题是当 Date 实体验证它应该时,数据没有在 Events 实体上重复。 SectionNameKeyPath 不接受 NSSet(多关系)作为有效键也无济于事。 吉姆,我重读了你的问题。我认为您最好以“老式方式”管理您的表视图。如果有日期的动态插入,您可以收听确实保存通知并将它们自己插入到正确的位置,或者只是重新加载数据。安德鲁以上是关于核心数据断言 sectionNameKeyPath 重复出现的多对多关系的主要内容,如果未能解决你的问题,请参考以下文章
NSFetchedResultsController sectionNameKeyPath不尊重fetchBatchSize
Swift:使用 sectionNameKeyPath 的单元格的 indexPath
NSFetchedResultsController、sectionNameKeyPath 和无数据日期的部分
coredata 错误,因为 sectionNameKeyPath 或 NSFetchedResultsController 处的分组数据