2014-09-19 1 views
8

Ho appena aggiornato a Xcode 6/iOS 8 SDK e la simulazione del servizio di localizzazione nel simulatore ha iniziato a non funzionare. Stava bene prima di essere aggiornato (al momento non sono in grado di testare sul dispositivo reale). Ora, quando seleziono una posizione per la simulazione, non succede nulla. Il metodo -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations del delegato non viene chiamato. Ho riavviato Xcode, pulito la cartella di build, nulla è cambiato. Perché può accadere?La simulazione posizione Xcode 6/iOS 8 non funziona

risposta

14

Dato che IOS 8 è necessario chiedere l'autorizzazione prima di avviare CLLocationManager.

Stai chiamando uno di questi metodi?

[self.locationManager requestWhenInUseAuthorization]; // For foreground access 
[self.locationManager requestAlwaysAuthorization]; // For background access 

Se è stato creato il progetto prima XCode 6, probabilmente anche bisogno di aggiungere la voce info.plist per la nuova autorizzazione.

Per maggiori dettagli un'occhiata a questo post: Location Services not working in iOS 8

14

Aggiungi sotto il codice nel metodo

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

aggiungere sotto la linea anche al vostro file di info.plist

chiave: NSLocationWhenInUseUsageDescription valore: usi posizione corrente

+0

Chiunque abbia problemi con questo, ho lottato per un po 'perché stavo usando '[locationManager requestWhenInUseAuthorization],' in app, ma aveva dichiarato il 'NSLocationAlwaysUsageDescription' nel file .plist (si noti la differenza di' sempre "e" quando è in uso. Questa soluzione funziona, ma assicurati di ** dichiarare il tipo di descrizione di utilizzo corretto **, "NSLocationWhenInUseUsageDescription" o "NSLocationAlwaysUsageDescription' (o forse entrambi) – 1owk3y

0

Le altre risposte sono corrette, ma ho anche dovuto reimpostare il simulatore ho potuto ottenere una posizione, mentre funzionava bene su un dispositivo. L'applicazione è stato inizialmente installato su quel simulatore prima iOS 8.

Per ripristinare il vostro simulatore:

https://stackoverflow.com/a/16195931

2

Utilizzando Xcode 6.3.1 ho avuto la posizione di aggiornamento fermata selezione. La correzione era di eseguire un altro progetto, selezionare "Simula posizione> Non simulare posizione", quindi creare nuovamente il progetto originale per riprendere le normali impostazioni di posizione.

0
- (void)startLocationUpdates{ 
    geocoder = [[CLGeocoder alloc] init]; 
    locationManager = [[CLLocationManager alloc] init]; 
    locationManager.delegate = self; 
    locationManager.distanceFilter = kCLDistanceFilterNone; 
    locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
    if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 8.0) 
     [locationManager requestWhenInUseAuthorization]; 
    [locationManager startUpdatingLocation]; 
} 

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation{ 

     CLLocation *currentLocation = newLocation; 
    if (currentLocation != nil) { 
    } 

    // Reverse Geocoding 
    [geocoder reverseGeocodeLocation:currentLocation completionHandler:^(NSArray *placemarks, NSError *error) { 

     if (error == nil && [placemarks count] > 0) { 
      placemark = [placemarks lastObject]; 
         fullAddress = [NSString stringWithFormat:@"%@,%@,%@,%@", 
          placemark.thoroughfare, 
          placemark.locality, 
          placemark.administrativeArea, 
          placemark.country]; 

      subtitleLocation = [NSString stringWithFormat:@"PostalCode::%@", 
           placemark.postalCode]; 
     } else { 
      // NSLog(@"%@", error.debugDescription); 
     } 
    } ]; 
} 

- (void)locationManager:(CLLocationManager *)manager 
     didFailWithError:(NSError *)error{ 

    NSLog(@"Cannot find the location."); 
}