在iOS上使用coredata对geospacial项目进行排序.更新所有"距离"属性的最快方法

Rod*_*ell 6 iphone core-data geolocation core-location ios

我正在开发一个应用程序,允许您搜索项目并按距离给定点进行排序.我正在使用的方法是,当我从远程API中提取数据时,我计算与当前位置的距离并将其存储为CoreData管理对象的属性.当我坐在家里开发时,这非常有效,但是当我在设备上使用时,然后将设备移动到不同的位置,属性就不正确,因为现在所有元素的距离都已改变.

我正在考虑的方法是在iPhone更改位置时运行整个核心数据存储并更新距离属性.

显而易见的问题是,我无法为每一次移动做到这一点,因为每次用户移动一英寸时我都会在整个CoreData存储中运行.这会杀死电池并导致用户体验缓慢

一些解决方案

  1. 我可以限制我在核心数据中存储的项目数量.一般不应超过100个相关项目.
  2. 我可以通过仅在用户位置改变一定距离时重新计算来限制重新计算的次数.
  3. 我可以在后台进行所有重新计算.

虽然这些解决方案应该可行,但我认为必须有一个更优雅的解决方案.

有人解决了类似的问题吗?

Ray*_*eck 5

您可能知道,您可以使用distanceFilter和desiredAccuracy配置CLLocationManager.这包括第2项.

100件物品根本不会强调核心数据,除非它们是巨大的物品.

你应该总是尝试在后台做非UI事情.

所以,我认为你已经覆盖了它; 这种方法没有什么不雅的.

试一试,看看你遇到的性能问题(如果有的话).