NSPredicate 用于在中间选择给定对象

Posted

技术标签:

【中文标题】NSPredicate 用于在中间选择给定对象【英文标题】:NSPredicate for selection with the given object in the middle 【发布时间】:2019-01-24 11:20:23 【问题描述】:

我需要从 CoreData 中获取对象,并为我提供了对象的时间戳(这是 Date 类型的对象属性)。问题是,我所拥有的对象必须位于此选择的中心。

例如:我们在 CoreData 中有 100 个对象。我有第 45 个对象的时间戳。我需要从 CoreData 中选择 30 个对象,第 45 个对象应位于此选择的中心。所以我需要从 30 到 61 获取对象。

我想出了这个变种:

let predicate = NSPredicate(format: "timestamp > %@ AND timestamp < %@", argumentArray: [baseTimestamp, baseTimestamp])

但是,显然,这行不通。

有没有机会通过他们的rownum 获取对象,我们在 SQL 中是如何做的?或者任何其他方式来实现这个选择?

【问题讨论】:

我想有很多方法可以实现这一点。想到的一种方法是进行 2 次提取,一次用于 n 对象,其日期早于(等于)给定日期,另一次用于 n 之后并将它们连接起来。另一种方法可能是获取所有排序的日期(您可以执行查询但仅获取特定属性的 API)并手动选择中间具有给定日期的切片,因此您将拥有您选择的所有 objectID需要。我希望这是有道理的。 我在考虑 2 次提取,但我对这种方法的性能感到困惑...... 我猜你可以分析一下看看。如果性能是一个问题,您可以继续优化。 @Alladinian,会试试的!谢谢:) 【参考方案1】:

最终,我最终获得了 2 次单独的提取,因为无法使用 NSPredicate 实现此选择 :((如果我错了,请随时留下您自己的答案,我很乐意将其标记为正确的答案)

【讨论】:

以上是关于NSPredicate 用于在中间选择给定对象的主要内容,如果未能解决你的问题,请参考以下文章

核心数据:NSPredicate 对象由实体对象组成

NSPredicate 用于多个对象和属性

NSArray 上的 NSPredicate 用于搜索任何对象

带有 NSPredicate 的 Fetchrequest 不返回正确的值

核心数据 - NSPredicate 用于具有相同列且满足另一个条件的对象

NSPredicate 用于查询中的位置