【问题标题】:CoreData conditionally fetching on NSDate using NSPredicate (swift)CoreData 使用 NSPredicate 有条件地在 NSDate 上获取(swift)
【发布时间】:2015-10-02 13:06:29
【问题描述】:

基本上我有一个名为 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

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

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

【问题讨论】:

    标签: ios swift core-data nsdate nspredicate


    【解决方案1】:

    我猜你是以 NSDate 格式向谓词发送参数:

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

    这里你的 startTime 和 endTime 是 NSDate 类型。尝试将其转换为 String 格式并将其传递给 predicate 。它应该可以工作。

    参考:NSPredicate: filtering objects by day of NSDate property

    【讨论】:

    • 谢谢@V-Xtreme。我试过let predicate = NSPredicate(format: "time&gt;= '\(startTime)' AND time&lt;= '\(endTime)'")。但是我得到了一个新错误,'-[__NSCFString timeIntervalSinceReferenceDate]: unrecognized selector sent to instance 0x7fb889fd6dc0'。
    • 它解决了“无法解析格式字符串”错误。但是得到了一个更令人困惑的错误。请看第一条评论,我编辑了它。 @V-Xtreme。
    【解决方案2】:

    接受的解决方案对我不起作用,尽管它具有直观意义。作为替代方案,我创建了一个谓词,以便搜索一个范围,如下所示:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-13
      • 2011-09-13
      相关资源
      最近更新 更多