核心数据,“按瞬态属性排序”解决方法
Posted
技术标签:
【中文标题】核心数据,“按瞬态属性排序”解决方法【英文标题】:Core Data, "sorting by transient property" workaround 【发布时间】:2011-08-19 01:05:03 【问题描述】:假设我有一个名为 Event 的 Core Data 实体,它代表经常性(每年)的事件。每个事件都有一个“日期”属性。
我需要将此事件按“下一次出现日期”排序给用户。当然,此属性取决于当前日期,因此应标记为 transient:将其存储在数据库中是没有意义的。
但是,如您所知,您无法通过 Core Data 中的瞬态属性查询排序。
有没有一种聪明的方法来保持这个属性的瞬态并且仍然为我排序核心数据?我不想获取然后对自己进行排序,但我也想避免将这些临时信息存储在数据库中。
【问题讨论】:
您要么自己获取、计算和排序,要么存储它并让 Core Data 排序。 【参考方案1】:如果您将日期存储在一个单独的实体中,那么您可以只获取日期并自行对它们进行排序。您将有一个从 Event 到 EventDate 的关系,以及一个相应的反向关系,让您可以从给定的 EventDate 中找到 Event。
建议:在您的 fetch 请求中指定一个排序描述符,以便您获得从年初开始排序的日期。然后,您所要做的就是在返回的数组中找到当前日期,并将该点之前的所有内容移动到数组的末尾。
使 EventDate->Event 关系为多,因为可能会发生多个 Event 落在同一日期。像这样设置您的模型为您提供了一个很好的属性,您可以轻松回答“日期 X 发生什么事件?”的问题
【讨论】:
如何让 Core Data 对“从年初开始”的一些日期进行排序?据我了解,它只对日期进行排序,即考虑年份。 回答我自己:我想我会将 NSDate 拆分为日、月和年字段,并使用 2 个排序描述符对其进行排序。 这是一种方法。另一种方法是在所有活动中使用同一年。由于这些事件显然被理解为每年重复一次,因此您可能无论如何都忽略了实际使用的年份。 +1 处理日期看似复杂。您经常发现自己必须创建相当详细的模型来处理它们。以上是关于核心数据,“按瞬态属性排序”解决方法的主要内容,如果未能解决你的问题,请参考以下文章