【问题标题】:CoreData: NSPredicate filter by dateCoreData:NSPredicate 按日期过滤
【发布时间】: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一起崩溃

标签: swift core-data nsdate nspredicate nsfetchrequest


【解决方案1】:

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

所以你必须这样做:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-08
    • 2019-03-01
    • 2016-01-10
    • 2018-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多