在 NSFetchedResultsController 中使用 Predicate 与 CoreData 进行日期比较

Date comparison using Predicate in NSFetchedResultsController with CoreData

我的 CoreData 实体有两个属性 date1date2。 CoreData 由基于 Sql 的商店提供支持。如何获取具有相同日期 1 和日期 2 的实体? (忽略时间。但是在存储的时候不能省略时间。)

我尝试了 [NSPredicate predicateWithFormat:@"date1/86400 == date2/86400"],但它不起作用。

我能否与 NSFetchedResultsController 一起实现此目的,或者我是否需要使用 blocks/functions 进行内存过滤?

在 SQLite 存储中使用 NSFetchRequest(或 NSFetchedResultsController),您只能进行简单的相等性检查或比较(date1 > date2 等)谓词。您可以使用内存中过滤,但也可以使用一种变通方法在获取时进行过滤。

只需向您的实体添加另外两个 NSDate 属性,我们称它们为:day1day2。然后每次保存 date1date2 时,保存一个 "stripped" 日期(没有小时、分钟、秒)到 day1day2。您可以选择一天中的任意时间,例如中午。然后只需在谓词中使用 @"day1 = day2" 即可。这将提高性能并使 NSFetchedResultsController 的工作更容易,但也需要更多 space 的存储空间。

作为旁注,进行日期计算 "by hand" 例如除以 86400 可能会失败 because one day does not always equal 24 hours