2012-04-13 8 views
7

Non appena installo e apro la mia app per la prima volta, richiede immediatamente i servizi di localizzazione, anche se non è stato chiamato startUpdatingLocation. Non ho nemmeno assegnato un'istanza CLLocationManager a quel punto. Vorrei che questo prompt fosse eseguito pigramente dopo che ho effettivamente effettuato la chiamata in modo che l'utente non lo spegni alla cieca. Il flusso è cambiato recentemente con iOS? Ricordo che una volta si chiedeva pigramente. Sto usando il firmware 5.1.Richiesta di servizi di localizzazione

+0

Stai parlando di quella finestra di dialogo (app *** vuole usare ...) che mostra la prima volta che l'utente avvia la tua app? –

+0

Sì, lo fa per qualche motivo in 5.1. – ssteinberg

+0

@rokjarc Sì, questo è quello. –

risposta

5

Questo è interessante. Ho verificato la tua ipotesi, che il gestore della posizione non è stato nemmeno assegnato e tuttavia viene visualizzato il dialogo Permesso di localizzazione iOS. Ho provato la seguente risoluzione dei problemi. Dopo ogni passaggio ho eseguito il progetto su un dispositivo e ho potuto solo visualizzare il popup di posizione all'ultimo passaggio.

  • Nuova app
  • richiedono location-servizi in info.plist
  • richiedono GPS in info.plist
  • collegamento CoreLocation al progetto
  • Importa Core Location in intestazione
  • Marchio e sintetizzare una proprietà per un gestore località
  • chiedere CLLocationManager per + autorizzazioneStato
  • chiedere CLLocationManager per + locationServicesEnabled
  • alloc init un'istanza CLLocationManager
  • dire CLLocationManager per avviare l'aggiornamento posizione.

Solo il passaggio finale ha generato un prompt. Per essere sicuro di aver persino creato un viewController che ha spinto un secondo controller di visualizzazione che inizializza un CLLocationManager e ha iniziato ad aggiornare la posizione. Il popup delle autorizzazioni veniva visualizzato solo quando veniva premuto il secondo controller della vista. Questo è tutto con l'ultimo Xcode in esecuzione su 5.1.

Ho dimostrato che i servizi di localizzazione richiedono solo il permesso nel momento esatto in cui provi e attivi le posizioni come nei precedenti SDK. Forse controlla il tuo codice, magari incollane un po 'qui per poter andare più nel dettaglio. :)

+0

Lo proverò anche solo per essere sicuro. Tutta la mia gestione della posizione viene effettuata tramite un singleton, quindi ho solo una chiamata a startUpdatingLocation nella mia intera app. Ho un breakpoint e non viene mai chiamato. L'unica altra possibilità a cui riesco a pensare è che uno dei quadri dipendenti, per qualsiasi ragione, lo stia innescando. Il mio progetto è grande, quindi sarà un * pain * ricreare il file di progetto. Inoltre sto usando e aggiornando il file di progetto da iOS 3.0. –

+1

Utilizzi forse una rete pubblicitaria o un sistema di telemetria? Andare alla barra laterale dei punti di interruzione, fare clic sul segno più nella parte inferiore e nella casella Simbolo digitare '- [CLLocationManager startUpdatingLocation]' e si dovrebbe interrompere per startUpdatingLocation su tutto il progetto e le librerie. Potrebbe anche valere la pena ascoltare '-startMonitoringSignificantLocationChanges' – jackslash

+0

Grazie per questo, questo è un buon trucco per sapere! Era perché stavo allocando (non mostrando) un MKMapView in background all'avvio per la visualizzazione successiva. –

Problemi correlati