2014-09-28 3 views
8

В основном половину времени метод делегатCLLocationManager не работает все время (IOS 8, Xcode 6)

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

не называется вообще. Но в другой половине времени он отлично работает! Я обнаружил, что это обычно происходит, когда я впервые запускаю Xcode после закрытия и увольнения, но потом после этого или после пары работает, кажется, работает нормально. Я не уверен на 100%, если это просто проблема с Xcode или что-то, я скоро получу лицензию разработчика, поэтому я посмотрю, будет ли это нормально работать на самом устройстве.

Начиная с viewDidAppear (пытался в viewDidLoad также не имеет никакого значения), я бегу метод инициализации мой locationManager материал:

locationManager = [[CLLocationManager alloc]init]; 

[locationManager setDelegate:self]; 
locationManager.distanceFilter = 20.0f; 
locationManager.desiredAccuracy = kCLLocationAccuracyBest; 
locationManager.pausesLocationUpdatesAutomatically = NO; 

if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) 
    [locationManager requestAlwaysAuthorization]; 

[locationManager startUpdatingLocation]; 

Иногда это работает, иногда нет. Я даже сделал таймер, чтобы повторно запускать все эти так много секунд, и это не работает.

Есть ли что-то еще, что я должен делать? Есть ли ответ на эту проблему?

Спасибо.

+0

Менеджер местоположения на самом деле предназначен только для работы на устройстве. В симуляторе вы пытались установить местоположение? – Milo

+0

Что вы подразумеваете под * половиной времени *? 'didUpdateLocations' вызывается, когда ОС имеет обновления местоположения для доставки. Иногда это происходит, иногда (реже) это не так. – Mike

+0

Немного вещей, у вас есть 'NSLocationAlwaysUsageDescription', добавленный в ваш файл info.plist apps? Вы установили местоположение в симуляторе? (Debug-> Location) – TyloBedo

ответ

0

добавить в viewdidappear

_locamangr = [CLLocationManager new]; 
    _locamangr.delegate = self; 
    // _locamangr.distanceFilter = kCLDistanceFilterNone; 
    _locamangr.desiredAccuracy = kCLLocationAccuracyBest; 
    if ([_locamangr respondsToSelector:@selector(requestAlwaysAuthorization)]) { 
     [_locamangr requestAlwaysAuthorization] ; 
     [_locamangr requestWhenInUseAuthorization]; 
    } 
    [_locamangr startUpdatingLocation]; 

и установить в infoplist. NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription метод

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

Этот делегат вызывается только тогда, когда новые локации доступны. Иногда gps не получает спутниковый сигнал, поэтому места не могут быть получены. Поэтому в этих ситуациях вышеупомянутый метод не запускается. Поскольку вы тестируете в симуляторе, вы должны изменить или установить местоположение. Я думаю, что это будет нормально работать на самом устройстве.

Смежные вопросы