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 用于在中间选择给定对象的主要内容,如果未能解决你的问题,请参考以下文章
NSArray 上的 NSPredicate 用于搜索任何对象
带有 NSPredicate 的 Fetchrequest 不返回正确的值