使用NSPredicate (swift)在NSDate上条件抓取CoreData



基本上,我有一个名为TimeLoc的实体,它有三个属性:时间、纬度和经度。它们的类型分别是Date, Double和Double。当我试图在属性时间上使用过滤器发出请求时,我被卡住了。

下面是我的代码:
...
var appDel: AppDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate) 
var context: NSManagedObjectContext = self.managedObjectContext!
var request = NSFetchRequest(entityName: "TimeLoc")
var endTime = NSDate()
var startTime = NSDate(timeIntervalSinceNow: -65)
let predicate = NSPredicate(format: "time>= (startTime) AND time<= (endTime)")
request.predicate = predicate
var results: NSArray = context.executeFetchRequest(request, error: nil)!
...

,我得到了以下错误:无法解析格式字符串"time>= 2015-07-14 03:24:03 +0000 AND time<= 2015-07-14 03:25:08 +0000"'

我该如何解决这个问题?我在谷歌上搜索了一下,但我找到的所有解决方案都是用Objective-C编写的。如果有人能用Swift回答我就太好了。

编辑:正如V-Xtreme所建议的,这个问题的答案可以在Glauco Neves对这个问题的回答中找到

公认的解决方案不适合我,尽管它有直观的意义。作为替代方案,我创建了一个谓词来搜索范围,如下所示:

"%K BETWEEN {%@, %@}",其中%K是我的关键路径,两个%@是我的开始和结束日期。

let datePredicate = NSPredicate(format: "%K BETWEEN {%@, %@}", argumentArray: [#keyPath(Activity.startTime), startDate!.startOfDay, endDate!.endOfDay])

我猜你是在NSDate格式发送参数到谓词:

let predicate = NSPredicate(format: "time>= (startTime) AND time<= (endTime)")

这里你的startTime和endTime是NSDate类型。尝试将其转换为字符串格式并将其传递给谓词。应该可以。

参考:nspreate:按NSDate属性的日期筛选对象

最新更新