ios - 核心数据 : object with minimum difference between property and variable

标签 ios objective-c core-data nspredicate nsmanagedobject

我的 Core Data 存储中有具有纬度和经度属性的记录。现在我需要找到最接近给定位置的记录。 在 SQL 中,我会这样做:

select t.lat
      ,t.lon
      ,(t.lat-varLat) + (t.lon - varLon) diff
from table t
order by diff ASC.

给定的 varLat 和 varLon 是我想要最近记录的位置的坐标。但是我不知道如何使用 NSPredicate 在 Core Data 中执行此操作。

我能想象到的最糟糕的事情是使用一个谓词循环获取请求,该谓词围绕给定的 (varLat,varLon) 扩展“搜索范围”,并使用 longitude BETWEEN %@ && latitude BETWEEN %@ 以 2 个数组(每个数组都有 center+ 和 center- radius 作为数组成员)作为参数,每次都扩大这个范围直到我得到一个命中..然而,这是远非最佳。

感谢您的建议。

最佳答案

首先,您的查询不正确,错误为 up to app. 40%。您的计算只是总结了纬度和经度的差异。假设是 2D 表面,实际差异是 sqrt((lat-varlat)^2 + (lon-varLon)^2)。在实际表面上,几何形状更复杂,但在大多数情况下差异可以忽略不计。

在 Core Data 中,获取所有实例然后在循环中迭代它们并不少见。原因是 Core Data 使用了一种称为故障的机制,它允许您检索大量对象而无需过多的内存开销。

关于ios - 核心数据 : object with minimum difference between property and variable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20152410/

相关文章:

ios - 错误 :Request failed: bad request (400) login via afnetworking in swift

ios - 任何写得很好的 Facebook iOS SDK 教程?

objective-c - 为什么 [[NSWindow animator] setFrame...] 有时很慢?

ios - 如何检测当前的self.view位置

ios - 在自定义 UICollectionView 类中实现时未正确调用数据源方法

objective-c - 带有文件内容的数组 : results in crash

swift - 传递给函数的 CoreData 类型

ios - 如何在 Core Data iOS Swift 中插入具有抽象父对象的对象

ios - 有没有办法以通用方式替换关系的添加和删除方法的核心数据实现?

ios - 应用程序进入后台时 GCDWebServer 崩溃