2014-09-28 30 views
8

Fondamentalmente metà del tempo metodo delegatoCLLocationManager non funziona tutto il tempo (IOS 8, Xcode 6)

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

non si chiama affatto. Ma l'altra metà del tempo funziona perfettamente! Ho scoperto che di solito accade quando avvio Xcode per la prima volta dopo la chiusura e quando esco, ma dopo di ciò o dopo un paio di correzioni, sembra funzionare bene. Non sono sicuro al 100% se si tratti solo di un problema Xcode o di cosa, presto riceverò la licenza di uno sviluppatore, quindi vedrò se funzionerà correttamente su un dispositivo reale.

Partendo dal viewDidAppear (provato in viewDidLoad anche, non faceva differenza), ho eseguito un metodo per init mia roba locationManager:

locationManager = [[CLLocationManager alloc]init]; 

[locationManager setDelegate:self]; 
locationManager.distanceFilter = 20.0f; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.pausesLocationUpdatesAutomatically = NO; 

if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
    [locationManager requestAlwaysAuthorization]; 

[locationManager startUpdatingLocation]; 

A volte funziona, a volte no. Ho persino fatto un timer per ri-eseguire questo ogni secondi così e così, e questo non funziona.

C'è qualcos'altro che dovrei fare? C'è qualche risposta a questo problema?

Grazie.

+0

Il responsabile della localizzazione ha proprio lo scopo di funzionare su un dispositivo. Nel simulatore, hai provato a impostare la posizione? – Milo

+0

Cosa intendi per * metà del tempo *? 'didUpdateLocations' viene chiamato quando il sistema operativo ha aggiornamenti di posizione da consegnare. A volte lo fa, altre volte (meno spesso) no. – Mike

+0

Poche cose, si ha "NSLocationAlwaysUsageDescription" aggiunto al proprio file info.plist dell'app? Due hai impostato una posizione nel simulatore? (Debug-> Location) – TyloBedo

risposta

0

aggiungere in viewDidAppear

_locamangr = [CLLocationManager new]; 
    _locamangr.delegate = self; 
    // _locamangr.distanceFilter = kCLDistanceFilterNone; 
    _locamangr.desiredAccuracy = kCLLocationAccuracyBest; 
    if ([_locamangr respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [_locamangr requestAlwaysAuthorization] ; 
     [_locamangr requestWhenInUseAuthorization]; 
    } 
    [_locamangr startUpdatingLocation]; 

e impostare in infoplist. NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription metodo

1
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations; 

Questo delegato viene richiamato solo se nuove sedi sono disponibili. A volte il GPS non riceve il segnale satellitare, quindi non è possibile ottenere le posizioni. Quindi in queste situazioni il metodo sopra menzionato non verrà attivato. Dato che stai testando il simulatore, dovresti cambiare o impostare la posizione. Penso che funzionerà bene su un dispositivo reale.

Problemi correlati