Coredata NSpredicate谓词日期迅速

时间:2020-01-11 03:28:08

标签: swift core-data nsdate nspredicate

一个古老的经典问题,但我明白了。

func callThisDay(startDate:Date, endDate:Date) -> [Login]{
    var datas = [Login]()
    let fetchRequest:NSFetchRequest<Login> = Login.fetchRequest()
    let predicate = NSPredicate(format: "date >= %@ AND date < %@", argumentArray: [startDate, endDate])
    fetchRequest.predicate = predicate
    do{
        let allData = try viewContext.fetch(Login.fetchRequest())
        for data in allData{
            datas.append(data as! Login)
        }
    }catch{
        print(error)
    }
    return datas
}

它总是返回所有数据。我怎么能有一天?

1 个答案:

答案 0 :(得分:0)

当然它总是返回所有数据,因为您忽略了自定义提取请求。

替换

let allData = try viewContext.fetch(Login.fetchRequest())

使用

let allData = try viewContext.fetch(fetchRequest)

方法可以简化

func callThisDay(startDate:Date, endDate:Date) -> [Login] {
    let fetchRequest : NSFetchRequest<Login> = Login.fetchRequest()
    fetchRequest.predicate = NSPredicate(format: "date >= %@ AND date < %@", startDate as NSDate, endDate as NSDate)
    do {
        return try viewContext.fetch(fetchRequest)
    } catch {
        print(error)
        return []
    } 
}