使用核心数据管理节标题中的日期

Posted

技术标签:

【中文标题】使用核心数据管理节标题中的日期【英文标题】:Managing dates in Section Headers with Core Data 【发布时间】:2011-06-15 14:50:24 【问题描述】:

我在使用核心数据方面存在概念问题。我的应用程序在主表视图中按标题列出事件,然后导航到事件唯一的表视图。在这里,它应该在表格视图的部分标题中显示事件日期、扩展范围的日期列表(需要计算)或唯一日期列表。

我在模型中安排了 3 个实体。事件和日期具有一对一的关系。日期到菜单具有一对多的关系。菜单包含具有唯一日期的事件的数据,日期包含具有开始日期或在某些情况下是结束日期范围的事件。

好的,如果上述内容很清楚,我的问题是如何创建一个事件独有的部分标题列表?请记住,NSFetchedResultsController 仅提供从 managedObject 返回部分名称的能力。我认为这就是让我感到困惑的原因。

我是否获取事件独有的数据,然后使用 FRC 创建数组来填充节标题并与未管理的表一起使用?还是有更聪明的方法?

【问题讨论】:

【参考方案1】:

我不太了解您的模型,但我认为它看起来像这样:

Event
  name:string
  date<-->Date.event


Date
  event<-->Event.date
  menus<-->>Menu.date


Menu
  date<<-->Date.menus

如果这不正确,您可以尝试使用这种格式的数据模型编辑问题,这样可以更好地理解。 (如果您无法编辑,只需将格式折叠成评论,我会添加它。或者,通过电子邮件发送给我。)

我不清楚您希望在 Event 表部分标题中包含哪些数据。部分旨在成为基于这些对象的某些属性的托管对象的分组。典型的例子是 Contact.app 的联系人列表。联系人根据姓氏的第一个字母的字母值进行分组。

曾经常见的错误是将节表视为表示层次对象,节标题表示上级对象,行表示下级对象,例如你有一个模型来模拟文件系统,所以你有一个Directory 实体和一个File 实体。您尝试将部分标题设置为Directory 的名称,并将行设置为相关File 实体的名称。这不会顺利进行,并且不会真正与用户为章节标题学习的界面语法相吻合。相反,您应该有一个表视图的层次结构,其中一个表显示所有Directory 对象,然后是第二个表视图,显示与所选“目录”对象相关的所有File 对象。

因此,如果您想要的部分标题来自除Event 之外的任何对象,那么您可能是从错误的角度处理问题。

【讨论】:

TechZen,感谢您的回复。您上面的模型是正确的,我应该通过将其设置为该格式来使其更清晰。第二个视图实际上是 UIViewController,其中包含一个滚动视图,其中三个滚动视图之一中嵌入了表格视图。想法是上半部分包含静态数据,例如事件的标题和图像,而滚动视图中的表格视图包含动态数据,例如行中的日期和价格/可用性。这些是事件日期所独有的,因此可以在日期部分下列出。也许我的问题需要更新? 在滚动视图中让tableview 正常工作会有困难,因为它有自己的滚动视图并且很难嵌套滚动视图。如果这是针对 iPhone 的,你会发现这样的 UI 很拥挤,即使滚动视图工作,人们也很难阅读和操作。 我发现滚动视图中的嵌套表格视图可以正常工作。每行包含的信息是适当有限的,因此易读性不是问题。自从我的OP以来,我有一些工作。我决定不需要 FRC,MO 足以提供我需要的所有数据源。

以上是关于使用核心数据管理节标题中的日期的主要内容,如果未能解决你的问题,请参考以下文章

使用 NSPredicate 比较核心数据查询中的日期

按核心数据中的日期组件获取条目

核心数据中的NSValidationDateTooLateError,但日期实际上是完全正常的

需要编写一个谓词来搜索核心数据对象数组属性中的日期(在我的例子中是日期数组)

获取核心数据中 NSManagedObject 的修改日期?

将日期保存到核心数据