CLLocationManager не возвращает правильное местоположение

Я работаю над приложением, которое проверяет ваше местоположение каждую минуту или около того, чтобы увидеть, изменилось ли ваше местоположение. Я имитирую изменения местоположения, используя смоделированное местоположение в xCode. Сначала я сделаю Лондон, затем, когда он обновится, я изменю его на что-то вроде Токио, а затем, когда придет время снова проверить местоположение, он просто не будет обновляться, он все еще думает, что находится в Лондоне.

-(void)recheckLocation{
    locationManager = nil;

    [recheckLocation invalidate];

    locationManager = [[CLLocationManager alloc]init];
    locationManager.delegate = self;
    locationManager.desiredAccuracy = kCLLocationAccuracyNearestTenMeters;
    [locationManager startUpdatingLocation];
}

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
{
    geocoder = [[CLGeocoder alloc] init];

    [locationManager stopUpdatingLocation];

    // Reverse Geocoding
    [geocoder reverseGeocodeLocation:newLocation completionHandler:^(NSArray *placemarks, NSError *error) {
        NSLog(@"Found placemarks: %@, error: %@", placemarks, error);
        if (error == nil && [placemarks count] > 0) {

            placemark = [placemarks objectAtIndex:0];
            NSString *Location = [NSString stringWithFormat:@"%@, %@",placemark.locality, placemark.administrativeArea];

            recheckLocation = [NSTimer scheduledTimerWithTimeInterval:60.0f target:self selector:@selector(recheckLocation) userInfo:nil repeats:YES]; 

        } else {
            NSLog(@"%@", error.debugDescription);
        }
    } ];

}

Независимо от того, сколько раз я менял местоположение, оно каждый раз дает мне одно и то же местоположение, а не правильное. Может кто-нибудь сказать мне, что я делаю неправильно?


person Matt    schedule 24.04.2013    source источник


Ответы (1)


Это немного более старый пост, и у меня есть базовые знания о CLLocationManager, но я все же пытаюсь решить проблему. Из приведенного выше кода я понимаю, что CLLocationManager воссоздается каждый раз. CLLocationManager похож на одноэлементный класс, который вам не нужно каждый раз создавать заново. Вам просто нужно вызвать [locationManager startUpdatingLocation]; .

Также каждый раз, когда вы вызываете [geocoder reverseGeocodeLocation:xxx]. Вероятно, вам нужно найти точность, прежде чем делать это, чтобы он не вызывался снова и снова.

person Srivathsa    schedule 21.09.2013