我有一个基于coredata的iphone应用程序,并且有一个具有纬度和经度作为属性的实体.如何返回距离当前位置的距离所订购的所有实体?我没有coredata编写一个SQL查询,但是我很早就做了这个,但是对于coredata是新手,并且无法弄明白.我想使用NSFetchedResultsController直接传递给我的tableview.
有什么帮助吗?
根据我的经验,最好的方法是计算第一次加载(或位置更改)时每个条目的距离,并将该属性保存到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 中也可以正常工作 - 但正如上面也指出的那样,您需要将对象复制到新数组中,并在获取完成后使用您自己的方法对它们进行排序。
| 归档时间: |
|
| 查看次数: |
2992 次 |
| 最近记录: |