在核心数据中查找最接近的数字而不迭代数据

Jan*_*Jan 2 core-data ios

我知道目前不可能在不加载所有数据并在代码中手动执行的情况下在核心数据中找到最近的地理位置,但是至少可以使用简单的数字吗?例如,我可以有一个包含条目和值的表1, 2.5, 4,我可以搜索3.6并返回条目4吗?

我的意思是 fetchRequest,带有 NSPredicate,它已经在 SQL 中完成了工作,因此不必加载对象并将其转换为 Swift/Objective-C 对象,如果您有 100,000 个条目,这可能会非常昂贵。

我在 NSPredicate 中找不到任何相关内容,所以我认为这是不可能的?那是对的吗?!

pba*_*sdf 5

我能想到的最好的解决方案是使用如下谓词进行获取:

fetch.predicate = NSPredicate(format:"attribute >= 3.6")
Run Code Online (Sandbox Code Playgroud)

attribute升序排序:

fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:true)
Run Code Online (Sandbox Code Playgroud)

但仅限于第一个结果:

fetch.fetchLimit = 1
Run Code Online (Sandbox Code Playgroud)

attribute这应该返回值最接近且大于或等于您所需值的对象。

然后重复获取,但谓词和排序顺序相反:

fetch.predicate = NSPredicate(format:"attribute < 3.6")
fetch.sortDescriptors = [NSSortDescriptor(key:"attribute", ascending:false)
fetch.fetchLimit = 1
Run Code Online (Sandbox Code Playgroud)

attribute这将返回值最接近但小于您所需值的对象。然后,您必须选择哪个对象实际上具有最接近的值。