Ho bisogno di un modo per ottenere il mio utente posizione corrente.iPhone Location Location Architecture - Come usarlo su più controller
Dato che un utente ha amici, e hanno anche dati di posizione, ho pensato che il modo giusto per andare fosse inserire un campo di posizione nel mio database dati db, sia nelle entità Friend
e User
.
Ora, qui è quello che ho pensato:
avere un qualche tipo di location manager singelton, che ogni volta che ho bisogno della posizione esatta Gli dico di iniziare le CLLocationManager
aggiornamenti. (di cui è responsabile il mio responsabile) Il gestore salverà la posizione nel campo user.location nel Db ei controller interessati alle informazioni user.location registreranno utilizzando KVO a tali dati. Mi suona bene, oltre al fatto che devo accedere a questa posizione singelton da ogni controller che ha bisogno di posizioni precise (per dirgli di iniziare a generare la posizione, non voglio che gli aggiornamenti di posizione siano sempre attivi) . Inoltre cerco di non inquinare il mio codice con un sacco di chiamate a singelton.
Anche se potrebbe essere più saggio avere il gestore di posizione come proprietà all'interno della mia classe User
. (ovviamente se in questo momento ho alcuni utenti in memoria, condivideranno tutti lo stesso gestore di location singelton) Aggiungerò un altro metodo alla classe utente e lo chiamerò "StartGettingLocation
", e ora ogni volta che qualche controller ha bisogno della posizione corrente esatta , che può fare uno dei seguenti modi:
- Se nel mio controller ho un oggetto utente (che è stata approvata insieme da altri UIViewController), mi basta chiamare il suo metodo "
StartGettingLocation
" e KVO suo campo posizione. - Se non ho un oggetto Utente nel mio Controller, lo prendo dal mio DB e faccio come sopra.
Suona bene?
In tal caso, ciò di cui non sono sicuro è se è possibile aggiungere un nuovo membro di MyLocationManager alla classe Utente (che è una sottoclasse su managedObject)? Qual è il modo giusto per realizzare questo?
Grazie
Non penso che il tuo CoreLocationManager sia responsabile di inviare aggiornamenti di posizione, è responsabilità di CLLocationManager di Apple. Mi aspetto che CoreLocationManager si conformi a CLLocationManagerDelegate. Quindi deciderebbe cosa fare con gli aggiornamenti di posizione, se salvarlo su DB o semplicemente pubblicare una notifica con esso. e Sì, la posizione è solo relavent all'utente corrente che ha effettuato l'accesso, quindi è ragionevole rendere gli altri controller KVO. Spero di aver capito bene. – Idan
Sei corretto. Il nostro CoreLocationManager non invia aggiornamenti di posizione, è semplicemente un wrapper per 'CLLocationManager'. Disponiamo di metodi per avviare/interrompere l'istanza CLLocationManager dal gestore. Implementiamo inoltre CLLocationManagerDelegate per aggiornare una proprietà CLLocation sul gestore. Scusa se non l'ho chiarito molto bene. –
Giusto, quindi come si fa a sapere che altri controllori sanno quando la posizione cambia? pubblichi una notifica? salva il tuo DB e lascia che sia l'altro KVO? – Idan