2014-09-19 9 views
8

Właśnie zaktualizowałem pakiet SDK do Xcode 6/iOS 8, a moja symulacja usługi lokalizacyjnej w symulatorze nie działa. To było w porządku, zanim zaktualizowałem (obecnie nie mogę testować na prawdziwym urządzeniu). Teraz, gdy wybiorę lokalizację do symulacji, nic się nie dzieje. Metoda delegata -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations nie jest wywoływana. Uruchomiłem ponownie Xcode, wyczyściłem folder kompilacji, nic się nie zmieniło. Dlaczego tak się dzieje?Symulacja lokalizacji Xcode 6/iOS 8 nie działa

Odpowiedz

14

Od czasu IOS 8 należy poprosić o autoryzację przed uruchomieniem menedżera CLLocationManager.

Czy wywołujesz jedną z tych metod?

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

Jeśli utworzyłeś projekt przed XCode 6, prawdopodobnie będziesz musiał dodać wpis info.plist dla nowego uprawnienia.

Aby uzyskać więcej informacji zajrzyj na tym stanowisku: Location Services not working in iOS 8

14

Dodaj poniższy kod w metodzie

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

także dodać poniższy wiersz w pliku info.plist

kluczowe: NSLocationWhenInUseUsageDescription Wartość: Zastosowania obecna lokalizacja

+0

Każdy mający problemy z tym, zmagałem się na chwilę, bo używałem '[locationManager requestWhenInUseAuthorization];' w aplikacji, ale nie ogłosił 'NSLocationAlwaysUsageDescription' w pliku .plist (zauważ różnicę" zawsze "i" w trakcie użytkowania. "To rozwiązanie działa, ale upewnij się, że ** deklarujesz poprawny typ opisu użycia **, albo' NSLocationWhenInUseUsageDescription' lub 'NSLocationAlwaysUsageDescription' (albo może oba) – 1owk3y

0

Inne odpowiedzi są poprawne, ale musiałem też zresetować symulator z tego względu mogłem uzyskać lokalizację, podczas gdy urządzenie działało dobrze. Aplikacja została wstępnie zainstalowana na tym symulatorze przed iOS 8.

Aby zresetować symulatora:

https://stackoverflow.com/a/16195931

2

Korzystanie Xcode 6.3.1 miałem wybór lokalizacji zatrzymania aktualizacji. Poprawka polegała na uruchomieniu innego projektu, wybierz "Symuluj lokalizację> Nie symuluj położenia", a następnie ponownie utwórz oryginalny projekt, aby wznowić normalne ustawienie lokalizacji.

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."); 
}