核心数据 NSPredicate - 匹配日期

Core Data NSPredicate - Match Dates

我在核心数据中有一个存储日期 属性 日期 的实体。我的视图 selectedDate 中有一个 @State 属性 类型为 Date.

我想使用获取请求来检索数据库中 日期 匹配 selectedDate 的所有实体。我想在没有时间的情况下做这件事;例如 selectedDate 可能是 15/03/2022 在 12:07pm,而 date 可能是 15/03/2022 在 9:05am - 我希望这些匹配。

我尝试使用以下方法(尽管这不会达到预期的时间行为):

request.predicate = NSPredicate(format: "date == %@", selectedDate.timeIntervalSince1970)

但是,当 运行 应用程序出现以下错误时,在谓词行上:

Thread 1: EXC_BAD_ACCESS (code=1, address=0x41d88c207fdc4b4d)

有人知道怎么做吗?

首先出现异常是因为占位符%@错误。 %@ 用于对象,Double 值由 %f 表示。

其次,如果你想获取特定日期的所有日期,你必须创建一个日期 range (0:00–23:59)那天。

使用 Calendar 你可以用 startOfDay(for:) 得到 0:00 并通过添加 day< 运算符得到一天的结束。

例如

let calendar = Calendar.current
let startDate = calendar.startOfDay(for: selectedDate)
let endDate = calendar.date(byAdding: .day, value: 1, to: startDate)!
let predicate = NSPredicate(format: "date >= %@ AND date < %@", argumentArray: [startDate, endDate]))