2011-05-12 10 views
6

Estoy desarrollando una aplicación que le permite buscar elementos y ordenar por distancia desde un punto determinado. El enfoque que estoy usando es que cuando ingiero los datos de la API remota, calculo la distancia desde mi ubicación actual y la almaceno como un atributo del objeto gestionado CoreData. Esto funciona perfectamente bien cuando estoy sentado allí desarrollando en casa, pero cuando uso en el dispositivo, luego muevo el dispositivo a una ubicación diferente, los atributos son incorrectos ya que la distancia ahora ha cambiado para todos los elementos.Ordenando elementos geospaciales utilizando coredata en iOS. La forma más rápida de actualizar todos los atributos de 'distancia'

El enfoque que estoy considerando es ejecutar a través de todo el almacén de datos central y actualizar el atributo de distancia cuando el iPhone cambia de ubicación.

El problema obvio es que no puedo hacer esto para cada movimiento, ya que estaría corriendo por la tienda CoreData completa cada vez que el usuario se mueve una pulgada. Esto mataría a la batería y ocasionar una experiencia de usuario lenta

Algunas soluciones:

  1. que podría limitar el número de artículos que tienda a tipos de datos básicos. No debería haber más de 100 artículos relevantes en general.
  2. Podría limitar el número de veces que se realiza el recálculo recalculando solo cuando la ubicación del usuario cambia en una distancia considerable.
  3. Podría hacer todos los recálculos en el fondo.

Si bien estas soluciones probablemente funcionen, imagino que debe haber una solución más elegante.

¿Alguien ha resuelto un problema similar a esto?

Respuesta

5

Como probablemente sepa, puede configurar CLLocationManager utilizando distanceFilter y la precisión deseada. Esto cubre el ítem 2.

100 elementos no estresarán los datos del núcleo en absoluto, a menos que sean elementos gigantescos.

Y siempre debe intentar hacer cosas que no sean UI en segundo plano.

Por lo tanto, creo que lo tienes cubierto; no hay nada de poco elegante en este enfoque.

Pruébelo y vea qué problemas de rendimiento tiene, si es que tiene alguno.

Cuestiones relacionadas