2014-09-19 2 views
8

Я только что обновил до Xcode 6/iOS 8 SDK, и мое симулятор службы определения местоположения в симуляторе не начал работать. Это было хорошо, прежде чем я обновил (в настоящее время я не могу проверить на реальном устройстве). Теперь, когда я выбираю место для симуляции, ничего не происходит. Метод делегата -(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations не вызывается. Я перезапустил Xcode, очистил папку сборки, ничего не изменилось. Почему это может произойти?Xcode 6/iOS 8 Местоположение Моделирование не работает

ответ

14

С IOS 8 вам нужно попросить авторизацию перед запуском CLLocationManager.

Вы называете один из этих методов?

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

Если вы создали проект до XCode 6, вы, вероятно, также необходимо добавить info.plist записи для нового разрешения.

Для получения более подробной информации посмотрите на этот пост: Location Services not working in iOS 8

14

Добавить Ниже кода в методе

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

Кроме того, добавьте ниже строки в файле info.plist

Ключ: NSLocationWhenInUseUsageDescription значение: Пользы текущее местоположение

+0

Любой человек, имеющих проблемы с этим, я боролся за некоторое время, потому что я использовал '[locationManager requestWhenInUseAuthorization],' в приложении, но объявил 'NSLocationAlwaysUsageDescription' в .plist файл (обратите внимание на разницу в" всегда "и" когда используется ". Это решение работает, но убедитесь, что вы ** объявляете правильный тип описания использования **, либо' NSLocationWhenInUseUsageDescription', либо 'NSLocationAlwaysUsageDescription' (или, возможно, оба) – 1owk3y

0

Другие ответы верны, но мне также пришлось сбрасывать симулятор Я мог получить местоположение, тогда как он работал нормально на устройстве. Приложение было первоначально установлено на этом тренажере, прежде чем прошивкой 8.

Для сброса тренажера:

https://stackoverflow.com/a/16195931

2

Использование Xcode 6.3.1 У меня было обновление выбора положения остановки. Исправление заключалось в том, чтобы запустить другой проект, выберите «Имитировать местоположение> Не имитировать местоположение», затем снова создайте исходный проект, чтобы возобновить обычную настройку местоположения.

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."); 
} 
Смежные вопросы