Necesito una forma de obtener la ubicación actual de mi usuario.Arquitectura de ubicación principal de iPhone: cómo usarla en varios controladores
Dado que un usuario tiene amigos, y también tienen datos de ubicación, creo que el camino correcto es poner un campo de ubicación en mi base de datos, tanto en Friend
como en User
.
Ahora, esto es lo que pensé:
tener algún tipo de gerente de locación singelton, que cada vez que necesito la ubicación exacta le digo a iniciar los cambios CLLocationManager
. (el cual es responsabilidad de mi gerente) El administrador guardará la ubicación en el campo user.location en el Db, y los controladores interesados en la información de ubicación del usuario se registrarán usando KVO con esos datos. Me parece bien, además del hecho de que tengo que acceder a esta ubicación singelton desde cada controlador que necesita ubicaciones precisas (para decirle que empiece a generar la ubicación, no quiero que las actualizaciones de ubicación estén encendidas todo el tiempo) . Además, trato de no contaminar mi código con un montón de llamadas singelton.
Creo que quizás sea más inteligente tener el administrador de ubicación como propiedad dentro de mi clase User
. (obviamente, si tengo algunos Usuarios en memoria en este momento, todos compartirán el mismo gestor de ubicación singelton) Agregaré otro método a la clase de usuario y lo llamaré "StartGettingLocation
", y ahora cada vez que algún controlador necesite la ubicación precisa actual , que puede hacer uno de los siguientes:
- Si en mi controlador tengo un objeto de usuario (que fue pasado a lo largo de por sí UIViewController), acabo de llamar a su método "
StartGettingLocation
" y MVA su campo de ubicación. - Si no tengo un objeto Usuario en mi Controlador, lo obtengo de mi DB y hago lo anterior.
¿Esto suena correcto?
Si es así, de lo que no estoy seguro, es si es posible agregar un nuevo miembro de MyLocationManager a mi clase de usuario (que es una subclase en managedObject)? ¿Cuál es la forma correcta de lograr esto?
Gracias
No creo que su CoreLocationManager sea responsable de enviar actualizaciones de ubicación, esa es la responsabilidad de CLLocationManager de apple. Esperaría que tu CoreLocationManager se conforme al CLLocationManagerDelegate. Luego, decidiría qué hacer con las actualizaciones de ubicación, si guardarlo en DB o simplemente publicar una notificación con él. y Sí, la ubicación solo es relevante para el usuario que está conectado actualmente, por lo que hacer que otros controladores KVO parezcan razonables. Espero haber entendido bien. – Idan
Estás en lo correcto. Nuestro CoreLocationManager no envía actualizaciones de ubicación, simplemente es un contenedor para 'CLLocationManager'. Tenemos métodos para iniciar/detener la instancia de CLLocationManager desde el administrador. También implementamos CLLocationManagerDelegate para actualizar una propiedad CLLocation en el administrador. Lo siento si no lo dejé muy claro. –
Bien, entonces, ¿cómo informa a otros controladores sobre cuándo cambia la ubicación? ¿Publica una notificación? guarda en su base de datos y deja que otros KVO? – Idan