2014-09-28 17 views
8

Zasadniczo połowa czasu metoda pełnomocnikCLLocationManager nie działa cały czas (iOS 8 Xcode 6)

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

nie jest wywoływana w ogóle. Ale druga połowa czasu działa idealnie! Zauważyłem, że zwykle dzieje się to po pierwszym uruchomieniu Xcode po zamknięciu i zamknięciu go, ale po tym lub po kilku działa, wydaje się, że działa dobrze. Nie jestem w 100% pewien, czy to tylko problem z Xcode, czy niedługo dostanę licencję programisty, więc sprawdzę, czy będzie działać poprawnie na prawdziwym urządzeniu.

Począwszy od viewDidAppear (próbuje w viewDidLoad też, nie ma różnicy), biegnę metodę init mój locationManager rzeczy:

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]; 

Czasami to działa, czasami nie. Zrobiłem nawet timer, żeby ponownie uruchomić to co sekunda, a to nie działa.

Czy jest coś jeszcze, co powinienem zrobić? Czy istnieje jakaś odpowiedź na ten problem?

Dzięki.

+0

Menedżer lokalizacji jest przeznaczony do pracy z urządzeniem. Czy w symulatorze próbowałeś ustawić lokalizację? – Milo

+0

Co masz na myśli przez połowę czasu *? 'didUpdateLocations' jest wywoływane, gdy system operacyjny ma aktualizacje lokalizacji do dostarczenia. Czasem tak się dzieje, innym razem (rzadziej) tak nie jest. – Mike

+0

Niewiele rzeczy, czy masz "NSLocationAlwaysUsageDescription" załadowany do pliku info.plist aplikacji? Dwóch ustawiłeś lokalizację w symulatorze? (Debugowanie-> Lokalizacja) – TyloBedo

Odpowiedz

0

dodać viewdidappear

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

i ustawić w infoplist. NSLocationWhenInUseUsageDescription NSLocationAlwaysUsageDescription metoda

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

Ten delegat jest wywoływana tylko wtedy, gdy nowe lokalizacje są dostępne. Czasami GPS nie otrzyma sygnału satelitarnego, więc nie można uzyskać lokalizacji. W takich sytuacjach powyższa metoda nie zostanie uruchomiona. Ponieważ testujesz w symulatorze, powinieneś zmienić lub ustawić lokalizację. Myślę, że będzie działać dobrze na rzeczywistym urządzeniu.

Powiązane problemy