获取核心数据对象的唯一日历日期

Posted

技术标签:

【中文标题】获取核心数据对象的唯一日历日期【英文标题】:Fetch Unique Calendar Dates For Core Data Object 【发布时间】:2014-08-05 19:41:27 【问题描述】:

我们如何?

例如: 如果我们有三个带有 NSDates 的情感对象:

"2014-08-04 20:33:42 +0000",
"2014-08-04 20:50:33 +0000",
"2014-08-04 20:50:46 +0000",
"2014-08-06 20:35:58 +0000",
"2014-08-08 20:33:49 +0000"

我想得到一个如下所示的 NSDates 数组:

2014-08-04 
2014-08-06 
2014-08-08

我已经探索了这些线程作为可能的解决方案,但它们都不起作用。

CoreData get distinct values of Attribute

How to count unique dates of CoreData objects?

一种可能是为我正在搜索的托管对象创建时间和日期属性,但这似乎是一个笨拙的解决方法。

另一种可能性是去除所有返回的 NSDates 的时间分量,然后再次过滤 Dates 数组以查找重复项。再一次,这看起来真的很笨重而且很容易坏。

我想获取一个仅包含日历日期的 NSDates 数组,然后使用该信息来呈现 tableview 单元格。当用户点击给定的 tableView 单元格时,我可以推送一个显示与该日历日期相关的数据的 viewController。随着时间的推移,NSDates 的数量可能会变大,因为会有很多具有 NSDates 的对象需要搜索,因此解决方案应该是有效的。

【问题讨论】:

【参考方案1】:

您将不得不使用与您描述的方法类似的方法,因为这就是需要完成的方式。

您正在存储 NSDate 值,但 NSDate 实际上并不代表日期——它代表一个特定的时刻,精确到几分之一秒(如果它被称为某事可能会更好像NSDateTime,但不是)。它实际上是一个围绕NSTimeInterval 的对象包装器,它只是一个double。 Core Data 只是保存这个值,并在必要时自动转换为NSDate。因此,您的示例数据中实际上并没有唯一的日历日期。一天中的时间不同,这意味着您的每个示例值都代表持久存储中的不同 double 值。

如果您想要唯一的日期值,您需要添加一个仅编码日期的字段,或者获取所有NSDate 样式属性并过滤结果。我可能会选择第一个 - 存储您实际需要查找的数据 - 但任何一个都可以。

【讨论】:

以上是关于获取核心数据对象的唯一日历日期的主要内容,如果未能解决你的问题,请参考以下文章

NSPredicate 获取具有 NSDate 日期范围内的日期属性的核心数据对象

通过日期选择器日历从选定日期获取数据

核心数据和后台线程的问题

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

如何从按对象创建日期排序的核心数据中获取结果?

核心数据:我想要获取的对象中的 pk