CoreData 使用 NSPredicate 在 NSDate 上有条件地获取 (swift)
CoreData conditionally fetching on NSDate using NSPredicate (swift)
基本上我有一个名为 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)!
...
我收到以下错误:
'Unable to parse the format string "time>= 2015-07-14 03:24:03 +0000 AND time<= 2015-07-14 03:25:08 +0000"'
我应该如何解决这个问题?我用谷歌搜索了一下,但我找到的所有解决方案都在 Objective-C 中。如果有人能在 Swift.
中回答我就太好了
编辑:正如 V-Xtreme 所建议的,这个问题的答案可以在 Glauco Neves 对 this question
的回答中找到
我猜你正在以 NSDate 格式向谓词发送参数:
let predicate = NSPredicate(format: "time>= \(startTime) AND time<= \(endTime)")
这里你的 startTime 和 endTime 是 NSDate 类型。尝试将其转换为 String 格式并将其传递给 predicate 。它应该有效。
参考:NSPredicate: filtering objects by day of NSDate property
接受的解决方案对我不起作用,尽管它符合直觉。作为替代方案,我创建了一个谓词来搜索一个范围,如下所示:
"%K BETWEEN {%@, %@}"
其中 %K
是我的关键路径,两个 %@
是我的开始和结束日期。
let datePredicate = NSPredicate(format: "%K BETWEEN {%@, %@}", argumentArray: [#keyPath(Activity.startTime), startDate!.startOfDay, endDate!.endOfDay])
基本上我有一个名为 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)!
...
我收到以下错误: 'Unable to parse the format string "time>= 2015-07-14 03:24:03 +0000 AND time<= 2015-07-14 03:25:08 +0000"'
我应该如何解决这个问题?我用谷歌搜索了一下,但我找到的所有解决方案都在 Objective-C 中。如果有人能在 Swift.
中回答我就太好了编辑:正如 V-Xtreme 所建议的,这个问题的答案可以在 Glauco Neves 对 this question
的回答中找到我猜你正在以 NSDate 格式向谓词发送参数:
let predicate = NSPredicate(format: "time>= \(startTime) AND time<= \(endTime)")
这里你的 startTime 和 endTime 是 NSDate 类型。尝试将其转换为 String 格式并将其传递给 predicate 。它应该有效。
参考:NSPredicate: filtering objects by day of NSDate property
接受的解决方案对我不起作用,尽管它符合直觉。作为替代方案,我创建了一个谓词来搜索一个范围,如下所示:
"%K BETWEEN {%@, %@}"
其中 %K
是我的关键路径,两个 %@
是我的开始和结束日期。
let datePredicate = NSPredicate(format: "%K BETWEEN {%@, %@}", argumentArray: [#keyPath(Activity.startTime), startDate!.startOfDay, endDate!.endOfDay])