2014-10-06 10 views
6

Passati alcuni giorni cercando di risolvere questo problema ma non riuscendo a trovare alcuna soluzione che funzioni. Ho controllato tutti i post su StackOverflow e ho provato tutte le loro soluzioni e nulla sembra funzionare. Ho anche provato il progetto di test della mela per CLLocation che funziona bene per me. Ho usato i pezzi del progetto di test melaCLLocation didupdatetolocation non chiamato

https://developer.apple.com/library/ios/samplecode/LocateMe/Listings/README_md.html

Ma il mio codice non funziona affatto. La DidupdateToLocation non viene mai chiamata.

Ecco il mio codice (in viewDidLoad)

_locationManager = [[CLLocationManager alloc] init]; 

self.locationManager.delegate = self; 



// This is the most important property to set for the manager. It ultimately determines how the manager will 

// attempt to acquire location and thus, the amount of power that will be consumed. 

self.locationManager.desiredAccuracy = kCLLocationAccuracyBest; 



// Once configured, the location manager must be "started" 

// 

// for iOS 8, specific user level permission is required, 

// "when-in-use" authorization grants access to the user's location 

// 

// important: be sure to include NSLocationWhenInUseUsageDescription along with its 

// explanation string in your Info.plist or startUpdatingLocation will not work. 

// 

if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) { 

    [self.locationManager requestWhenInUseAuthorization]; 

} 

[self.locationManager startUpdatingLocation]; 



[self performSelector:@selector(stopUpdatingLocationWithMessage:) 

      withObject:@"Timed Out" 

      afterDelay:30]; 

Ho controllato per assicurarsi locationServicesEnabled sia abilitato.

Ho aggiunto la proprietà NSLoationWhenInUseUsageDescription al file info.plist. C'è qualche altra proprietà che devo aggiungere o abilitare i servizi ??

Non posso per amore di dio capire cosa ho fatto di sbagliato. Qualcuno può aiutarmi per favore con questo.

+0

btw viene visualizzato l'avviso di autorizzazione? –

+0

non viene visualizzato l'avviso di autorizzazione – dogwasstar

+1

Quindi suppongo che il callback doChangeAuthorizationStatus non venga chiamato, giusto? Il servizio di localizzazione per l'app è abilitato? (Impostazioni/Privacy/Servizi di localizzazione) Sei sicuro di aver aggiunto la chiave giusta per il tuo .plist? –

risposta

0

Sciocco. Ho aggiunto le parole chiave al file plist sbagliato. Ho funzionato ora. Grazie per il vostro aiuto ragazzi.

6

È necessario chiamare la posizione di avvio dopo aver ricevuto la richiamata didChangeAuthorizationStatus su iOS8.

//iOS 8 API change 
if([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]){ 
    [self.locationManager requestWhenInUseAuthorization]; 
}else{ 
    [self.locationManager startUpdatingLocation]; 
} 

implementare questo metodo delegato:

-(void)locationManager:(CLLocationManager *)manager didChangeAuthorizationStatus:(CLAuthorizationStatus)status 
{ 
    switch (status) { 
     case kCLAuthorizationStatusNotDetermined: 
     case kCLAuthorizationStatusRestricted: 
     case kCLAuthorizationStatusDenied: 
     { 
      // do some error handling 
     } 
      break; 
     default:{ 
      [self.locationManager startUpdatingLocation]; 
     } 
      break; 
    } 
} 
6

In primo luogo, non dimenticare, con IOS 8 dovete fare [locationManager requestWhenInUseAuthorization] più [locationManager requestAlwaysAuthorization];

_locationManager = [CLLocationManager new]; 

if(SYSTEM_IS_OS_8_OR_LATER) { 
    [_locationManager requestWhenInUseAuthorization]; 
    [_locationManager requestAlwaysAuthorization]; 

} 

_locationManager.delegate = self; 
_locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
//and the problem with your code : don't forget to start 
_locationManager startUpdatingLocation]; 

e nella vostra didUpdateLocations

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

     _currentLocation = [locations objectAtIndex:0]; 
     //do your stuff with the location 

    } 
+0

meraviglioso. L'aggiunta di 'requestWhenInUseAuthorization' e' requestAlwaysAuthorization' è la soluzione. –

0

ho semplicemente trascorrere un'intera mattinata su questo [in onestamente io sono relativamente nuovo OOC], in ogni caso il problema ..

didUpdateLocation compila e non viene mai chiamato didUpdateLocations compila e funziona !!

Non è la risposta in questo caso, ma è nella domanda, un errore facile da fare. Utilizzo di IOS 8.1.3 & Xcode 6.1.1

0

Basta aggiungere tre proprietà in Info.plist.

per ottenere la posizione corrente, se non è chiamando il metodo didUpdateToLocation

NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription privacy - location usage description di tipo String.