如何使用coredata获取按距离排序的地点列表

12 iphone core-data

我有一个基于coredata的iphone应用程序,并且有一个具有纬度和经度作为属性的实体.如何返回距离当前位置的距离所订购的所有实体?我没有coredata编写一个SQL查询,但是我很早就做了这个,但是对于coredata是新手,并且无法弄明白.我想使用NSFetchedResultsController直接传递给我的tableview.

有什么帮助吗?

sam*_*tte 9

根据我的经验,最好的方法是计算第一次加载(或位置更改)时每个条目的距离,并将该属性保存到CoreData,这样您就可以使用distance属性轻松获取条目.

这是一个代码片段,用于计算两组坐标之间的距离:

for(SWShow *show in shows) {
    CLLocation *showLocation = [[CLLocation alloc] initWithLatitude:show.latitude longitude:show.longitude];
    double distance = [currentLocation distanceFromLocation:showLocation]/1000 // in km
    show.distance = @(distance);
}

[managedObjectContext save];
Run Code Online (Sandbox Code Playgroud)


小智 2

我也有类似的情况 - 尽管上述关于无法使用 NSFetchedResultsController 的情况是正确的,但您仍然可以使用核心数据来检索数据。

我之前也使用过 sqlite3 - 我的提取是作为一系列不断增加的边界框大小的提取来完成的 - 直到达到我有“足够”结果的大小。就我而言,我将每次迭代的纬度和经度跨度加倍 - 给出大约。每次迭代的面积增加四倍。

此方法在 Core Data 中也可以正常工作 - 但正如上面也指出的那样,您需要将对象复制到新数组中,并在获取完成后使用您自己的方法对它们进行排序。