Бета-версия iOS 8: диспетчер местоположений не регистрирует местоположение пользователя

С момента выпуска новой бета-версии iOS 8 мне не удалось успешно определить местоположение пользователя. До обновления до iOS 8 у меня не было проблем, но теперь он всегда возвращает 0,000000 в качестве текущей широты и долготы. Это просто баг новой версии? Мой код указан ниже:

//from the .h file
@interface MasterViewController : PFQueryTableViewController<CLLocationManagerDelegate,UITextFieldDelegate, UISearchBarDelegate, UISearchDisplayDelegate> {

}
@property (nonatomic, strong) CLLocationManager *locationManager;

//from the .m file
@synthesize locationManager = _locationManager;

- (void)viewDidLoad {
  [super viewDidLoad];
  [self.locationManager startUpdatingLocation];
}


- (CLLocationManager *)locationManager {
   if (_locationManager != nil) {
       return _locationManager;
   }

   _locationManager = [[CLLocationManager alloc] init];
   _locationManager.delegate = self;
   _locationManager.desiredAccuracy = kCLLocationAccuracyBest;

   return _locationManager;
}

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

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

ОБНОВЛЕНИЕ На этот вопрос дан ответ (Службы определения местоположения не работают в iOS 8). Для тех, кто все еще борется с этим, для обеспечения обратной совместимости с iOS 7 я использовал код ниже:

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

person JKoko    schedule 11.06.2014    source источник
comment
Я исправил проблему, ответ можно найти здесь: stackoverflow.com/questions/24062509/   -  person JKoko    schedule 11.06.2014
comment
Я нашел решение здесь datacalculation.blogspot.in/2014. /11/   -  person iOS Test    schedule 05.11.2014


Ответы (1)


Как упоминалось в вашем обновлении/комментарии, iOS8 требует, чтобы вы использовали requestAlwaysAuthorization или requestWhenInUseAuthorization, а также новый ключ NSLocationAlwaysUsageDescription или NSLocationWhenInUseUsageDescription в Info.plist.

Но есть еще кое-что, что не так в вашем коде:

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

Он устарел в iOS6, и теперь вместо него следует использовать этот новый метод делегата:

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

Затем вы можете получить последнее местоположение примерно так:

CLLocation *newLocation = [locations lastObject];
person Erwan    schedule 22.10.2014
comment
Я не знал этого, я проверю это. Спасибо! - person JKoko; 22.10.2014
comment
Я получил решение здесь datacalculation.blogspot.in/2014 /11/ - person iOS Test; 05.11.2014