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 >= %f", NSNumber(bool:false), today.timeIntervalSince1970
或timeIntervalSinceReferenceDate
。
它与-[__NSCFNumber timeIntervalSinceReferenceDate]: unrecognised selector
一起崩溃
【参考方案1】:
在您的模型中,您将dateTime
属性设置为Date
对象,但您将其保存为double
。
所以你必须这样做:
dateTime = NSDate(dateWithTimeIntervalSinceReferenceDate:Double(activityInfo["eventDateTime"] as! String))
注意,我不会说 Swift,所以我不知道这段代码是否可以更短,但你明白了。
【讨论】:
以上是关于CoreData:NSPredicate 按日期过滤的主要内容,如果未能解决你的问题,请参考以下文章
NSPredicate 在 CoreData 中按字母顺序获取记录