Sto cercando di tracciare una mappa usando lat, lng per un DB sqlite, ma CANT ottiene la mia posizione prima che la mappa venga disegnata. Uggg!
Domanda
Cosa posso fare: Prendi un DB sqlite di 100 punti lat e lng e rilascia quei pin su una mappa. Sembra FANTASTICO!
Quello che vorrei fare è ottenere la mia posizione, PRIMA di disegnare la mia mappa. Ma sembra che:
- (void) locationManager: (CLLocationManager *) manager didUpdateToLocation: (CLLocation *) newLocation fromLocation: (CLLocation *) oldLocation
SEMPRE si spegne DOPO (vuoto) viewDidLoad viene eseguito. NO MATTER dove lo inserisco.
Quello che devo fare è avere una schermata iniziale, FERMARCI finché non ottengo una posizione, usare quel lat e lng per cercare il mio DB sqlite di posizioni entro così tante miglia da me.
Ecco la mia traccia:
Invio - [RootViewController initWithTabBar]
Invio - [RootViewController viewDidLoad]
Invio - [RootViewController locationManager: didUpdateToLocation: fromLocation:]
Ed ecco quello che voglio davvero:
Invio - [RootViewController initWithTabBar]
Invio - [RootViewController locationManager: didUpdateToLocation: fromLocation:]
Invio - [RootViewController viewDidLoad]
Ora sto pensando (lavorando con un tabbarcontroller), devo in qualche modo riportarlo al delegato della mia app? Congelare l'intera app fino a quando non ottengo una posizione? Questi sono i miei ultimi pensieri.
grazie per eventuali suggerimenti, lead, frammenti ... !!! Ho cercato giorni, senza fortuna.
grazie !!!!
Soluzione
Non vuoi assolutamente " congelare " l'app e sicuramente vuoi fare il minor lavoro possibile nel metodo applicationDidFinishLaunching:
del delegato della tua app. Cosa potrei raccomandare:
- Hanno due viste: una è la "reale" visualizzare con la mappa (presumibilmente) controllata da un controller di visualizzazione. L'altro è solo un semplice "attesa" visualizzare con un messaggio per l'utente e un
UIActivityIndicatorView
o qualcosa del genere. - Quando l'app viene avviata, carica e visualizza la vista di attesa nella finestra dell'app e avvia il gestore della posizione per trovare la posizione corrente dell'utente.
- Quando hai abbastanza informazioni sulla posizione, carica la vista reale, aggiungila alla finestra e rimuovi la vista di attesa. (Forse con una bella animazione con dissolvenza incrociata o qualcosa del genere.)
Puoi anche aggiungere entrambe le viste e capovolgere le loro proprietà nascoste
al momento giusto. Ma il punto è dare all'utente qualcosa da guardare, senza cercare di combattere la natura intrinsecamente asincrona di Core Location.