Iphone 核心数据为sectionNameKeyPath的重复出现断言多对多关系

Iphone 核心数据为sectionNameKeyPath的重复出现断言多对多关系,iphone,core-data,nsfetchedresultscontroller,Iphone,Core Data,Nsfetchedresultscontroller,我有一个核心数据模型,看起来像这样 活动日期 一个事件可以有多个日期,一个日期可以有多个事件。我需要我的tableview列出带有显示日期的SectionHeader的事件 我的问题是,我不知道如何设置它,以便每次在SectionHeader中显示新日期时事件都会再次发生 当我将谓词设置为收集每个事件的所有日期时,在FRC上设置sectionNameKeyPath时,它不允许重复事件。如果不使用多对多关系,只使用事件对象的date属性,只查找某个特定日期的所有事件,难道没有意义吗?我想使用NSP

我有一个核心数据模型,看起来像这样

活动日期

一个事件可以有多个日期,一个日期可以有多个事件。我需要我的tableview列出带有显示日期的SectionHeader的事件

我的问题是,我不知道如何设置它,以便每次在SectionHeader中显示新日期时事件都会再次发生


当我将谓词设置为收集每个事件的所有日期时,在FRC上设置sectionNameKeyPath时,它不允许重复事件。

如果不使用多对多关系,只使用事件对象的date属性,只查找某个特定日期的所有事件,难道没有意义吗?我想使用NSPredicate可以做到这一点

次要的缺点是,您必须为每个重复发生的事件创建一个条目,并在其中一个事件发生更改时修改所有条目。从功能上讲,这是有益的,因为它允许用户修改系列中的单个事件,或取消/删除一个事件,而不影响系列中的其他事件。

Jim

NSFetchedResultsController仅限于单个实体。因此,许多复杂查询是不可能的,或者需要使用子查询进行复杂查询。根据我的经验,除非您的数据模型适合这种狭窄的设计,否则您将遇到麻烦。我退回到侦听上下文并保存通知和处理更改或直接插入的对象


Andrew

不幸的是,这与我掌握的数据不符,而这些数据比我在问题中概述的更为复杂。简而言之,每个活动的日期可以分为三类;单个事件、非连续天数或时间的事件以及跨越范围并以开始和结束日期标记跨度的事件。我知道如何将最后两个属性排列成一组,以便它们与一个事件相对应,但我无法将数据标准化,以便根据需要为每个剖面标头乘以事件。奇怪的是,如此简单的事情竟如此复杂。如果你在列表视图中查看日历应用程序,你会注意到跨越一系列日期的约会是如何在每个部分标题下重复的,这正是我试图实现的目标。我可以对所有的日期数据进行建模,但我就是不知道如何将其映射到节标题。我想我可能会尝试创建一个日历,并根据该实体预测事件日期数据,但没有关系。Jim,我不同意。核心数据的使用方式与大多数其他数据库系统不同。在这种情况下,听起来您的数据模型不太适合核心数据。通过一些简单的更改,它可能更适合。例如,由于绑定和NSFetchedResultsController的工作方式,数据有时会在实体中重复。您可能必须执行此操作才能呈现日历。安德烈,我不确定我是否明白你的意思。我的问题是,当日期实体验证数据应该复制时,事件实体上的数据不会复制。SectionNameKeyPath不接受NSSet-to-many关系作为有效密钥也没有帮助。Jim,我重新阅读了你的问题。我认为你最好用老式的方式来管理你的桌面视图。如果存在日期的动态插入,您可以侦听did save通知并将其自己插入到正确的位置,也可以重新加载数据。安得烈