核心数据 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]))
我在核心数据中有一个存储日期 属性 日期 的实体。我的视图 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]))