2010-04-19 16 views
6

Tengo una aplicación que contiene algunas ubicaciones en Core Data, y quiero mostrarlas al usuario por orden de proximidad a la ubicación del usuario. Estoy usando NSFetchedResultsController para servir las ubicaciones a la Vista de tabla. Pensé en la creación de un método de acceso virtual que devuelve la distancia a la ubicación del usuario, que se calcula utilizando una CoreLocationManager "global", pero se estrella con la razón:Ordenar NSFetchedResultsController resultados por ubicación de usuario

Terminación de aplicación debido a excepción no detectada 'NSInvalidArgumentException', motivo: 'distanceFromCurrentLocation ruta de acceso clave no se encuentra en la entidad < NSSQLEntity Ubicación id = 4>'

también doy al usuario la opción de ordenar por orden alfabético, por lo que preferiría que me quedé con el NSFetchedResultsController, si es posible.

¿Cómo debo hacerlo?

Gracias!

Respuesta

1

Los accesadores virtuales no funcionarán en Core Data a menos que tenga un atributo transitorio definido en la entidad. NSFetchedResultsController (y todas las demás operaciones de Core Data) observan el gráfico de las entidades antes de intentar realizar alguna operación. Si la propiedad virtual no aparece en la definición de la entidad, NSFetchedResultsController informará que no existe tal atributo.

Desea definir un atributo transitorio en la entidad con el nombre distanceFromCurrentLocation y debe poder escribir un acceso virtual y hacer que NSFetchedResultsController lo vea.

+0

Me da el mismo choque cuando uso una propiedad transitoria .. Solo cuando se trata de una propiedad estándar funciona, pero entonces es conceptualmente incorrecto, supongo .. – cgp

+0

No estoy seguro de lo que está tratando de hacer exactamente. ¿Está almacenando las ubicaciones en las entidades de datos centrales o está tratando de utilizar los datos centrales para organizar las ubicaciones para mostrarlas en una tabla sin insertarlas primero en las entidades? Si es el último, entonces eso no funcionará. – TechZen

1

Traté de hacer lo mismo para ordenar los resultados por la distancia desde una ubicación. He aquí una de mis preguntas:

Core Data and Core Location

Resultó que tiene que cargar todas las ubicaciones en la memoria para compararlos. Terminé usando SQLite, que es más difícil de implementar pero me causó muchos menos dolores de cabeza para este tipo de función.

Probablemente no sea la respuesta que desea, pero si tiene un gran conjunto de datos, recomendaría SQLite. Terminó siendo más rápido y más fácil de tratar para mí.

+0

Desafortunadamente, SQLite no es una opción para mí, ya que necesito usar bases de datos Core Data existentes ... Gracias por la sugerencia de todos modos;) – cgp

3

El problema (o la característica que falta) de NSFetchedResultsController es la capacidad que falta para usar atributos transitorios para el orden de clasificación y la ruta de la clave de sección.

tuve problemas con esto también, por lo que podría estar interesado en esto:

NSFetchedResultsController sections localized sorted

estoy seguro de que podría utilizar este enfoque, así si se puede garantizar un conjunto limitado de registros. Pero realmente me encantaría ver una solución más sofisticada.

Cuestiones relacionadas