CoreData 获取问题:获取具有特定日期数组的实体

Posted

技术标签:

【中文标题】CoreData 获取问题:获取具有特定日期数组的实体【英文标题】:CoreData fetching issue: fetching entities with an array of specific days 【发布时间】:2017-01-15 08:01:35 【问题描述】:

我保存了实体并给了它们一个名为“日期”的属性。我的目标是获取特定天数的对象。由于日期(NSDate)对象是特定的时间点,我不得不为我想要获取的每一天创建“日期范围”。

我怎样才能有效地解决这个问题?我应该为 N 天创建 N 个谓词还是使用“AND”子句创建一个大谓词?有没有聪明的方法来实现这个共同目标?

【问题讨论】:

NSCoumpoundPredicate 应该是要使用的,使用“日期> = StartOfDay AND date > = endOfDay`为你想要的每一天创建一个OR谓词,并用OR复合它们。 确实最终使用了复合谓词。谢谢。 【参考方案1】:

如果您多次需要数据(因此所有事件),则不应在每次请求时都获取它们,最好过滤它们。

例如:

var allEvents = [Events]()

...
let fetchRequest = NSFetchRequest(entityName: "events")
allEvents = try context.executeFetchRequest(fetchRequest) as! [Event]

然后,当你需要它们时

1.特定日期

let calender = NSCalendar.currentCalendar()
eventsForSelectedDay = events.filter(  return calender.isDate($0.yourDateProperty, inSameDayAsDate: self.currentSelectedDate) == true  )

2。日期范围

eventsForSelectedDays = events.filter(  return $0.yourDateProperty >= dateFrom && $0.yourDateProperty < dateTo  )

【讨论】:

所以你会先获取所有实体,然后通过过滤特定范围来获取所需的选择?听起来不错,但我搜索特定谓词的原因是出于记忆的原因。是否有应该提取到内存中的对象数量的阈值(关注性能)?除此之外,很好的答案。 isDate(_:inSameDayAsDate:):如果两个 NSDate 实例在同一天,则返回 true - 无需深入研究日期组件。你的例子是:let filtered = events.filter calendar.isDate($0.date, inSameDayAs: otherDate)

以上是关于CoreData 获取问题:获取具有特定日期数组的实体的主要内容,如果未能解决你的问题,请参考以下文章

获取 SwiftUI CoreData 关系

在 CoreData 中存储和获取字典数组

CoreData Predicate 获取包含数组中任何单词的每个句子

具有序列顺序的Coredata fetch-request

NSPredicate 获取具有 NSDate 日期范围内的日期属性的核心数据对象

CoreData - 如何创建 fetchrequest 以获取随机属性值数组