CoreData:NSPredicate 按日期过滤

Posted

技术标签:

【中文标题】CoreData:NSPredicate 按日期过滤【英文标题】:CoreData: NSPredicate filter by date 【发布时间】:2016-06-14 07:55:50 【问题描述】:

我有一个数据集,其中包含以下日期6/14, 6/15, 6/16, 6/17 and 6/18

我有两个谓词

let today = NSDate() 
NSPredicate(format: "checked == %@ AND dateTime >= %@", NSNumber(bool: false), today)
NSPredicate(format: "checked == %@ AND dateTime < %@", NSNumber(bool: false), today)

假设今天是6/16,所以根据第一个谓词,fetchRequest 应该只选择6/16, 6/17 and 6/18,而对于第二个谓词,fetchRequest 应该只选择6/14 and 6/15

但问题是第一个谓词选择所有行,第二个返回空白。

数据模型

转换代码

知道这里出了什么问题。

【问题讨论】:

您是否真的将日期保存为NSDate(而不是NSString)? 属性类型为Date,在保存过程中我将其转换为NSTimeInterval 显示模型和转换代码 根据您的情况尝试"... AND dateTime &gt;= %f", NSNumber(bool:false), today.timeIntervalSince1970timeIntervalSinceReferenceDate 它与-[__NSCFNumber timeIntervalSinceReferenceDate]: unrecognised selector一起崩溃 【参考方案1】:

在您的模型中,您将dateTime 属性设置为Date 对象,但您将其保存为double

所以你必须这样做:

dateTime = NSDate(dateWithTimeIntervalSinceReferenceDate:Double(activityInfo["eventDateTime‌​"] as! String))

注意,我不会说 Swift,所以我不知道这段代码是否可以更短,但你明白了。

【讨论】:

以上是关于CoreData:NSPredicate 按日期过滤的主要内容,如果未能解决你的问题,请参考以下文章

CoreData NSPredicate 按日期获取数据

coredata NSPredicate 中的日期比较

NSPredicate 在 CoreData 中按字母顺序获取记录

NSPredicate 与核心数据问题

有没有办法根据存储在 CoreData 中的实际值来设置 NSPredicate?

NSPredicate - 核心数据 - 比较两个属性