Метод didUpdateLocation Никогда не вызывается - PullRequest
7 голосов
/ 21 марта 2011

Я делаю одно приложение на iphone sdk4.0. В нем обновился метод определения местоположения, который никогда не вызывался. Я дал мой код ниже. Пожалуйста, помогите. Спасибо заранее.

-(id)init
{
    [super init];

    obj=[[UIApplication sharedApplication]delegate];

    locationManager = [[CLLocationManager alloc] init];
    locationManager.delegate = self;
    //locationManager.distanceFilter = kCLDistanceFilterNone; // whenever we move
    locationManager.desiredAccuracy = kCLLocationAccuracyHundredMeters; // 100 m
    [locationManager startUpdatingLocation];

    return self;

}

-(void)locationManager:(CLLocationManager *)manager
   didUpdateToLocation:(CLLocation *)newLocation
          fromLocation:(CLLocation *)oldLocation
{
    NSLog(@"%f",newLocation.coordinate.latitude);

    NSLog(@"%f",newLocation.coordinate.longitude);

    obj=[[UIApplication sharedApplication]delegate];

    location=[[CLLocation alloc]initWithLatitude:newLocation.coordinate.latitude longitude:newLocation.coordinate.longitude];
    obj.lattitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.latitude];

    obj.longitude1=[NSString stringWithFormat:@"%f",newLocation.coordinate.longitude];
    //location=[[CLLocation alloc]initWithLatitude:39.9883 longitude:-75.262227];
}

Ответы [ 6 ]

18 голосов
/ 22 сентября 2014

Кроме того, в iOS8 у вас должно быть две дополнительные вещи:

  • Добавьте ключ в ваш Info.plist и запросите авторизацию у менеджера местоположения, попросив его запустить.

    • NSLocationWhenInUseUsageDescription

    • NSLocationAlwaysUsageDescription

  • Вам необходимо запросить авторизацию для соответствующего метода определения местоположения.

    • [self.locationManager requestWhenInUseAuthorization]

    • [self.locationManager requestAlwaysAuthorization]

Пример кода:

self.locationManager = [[CLLocationManager alloc] init];
self.locationManager.delegate = self;
// Check for iOS 8. Without this guard the code will crash with "unknown selector" on iOS 7.
if ([self.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
    [self.locationManager requestWhenInUseAuthorization];
}
[self.locationManager startUpdatingLocation];

Источник: http://nevan.net/2014/09/core-location-manager-changes-in-ios-8/

5 голосов
/ 21 марта 2011

Привет, ваши коды, кажется, в порядке. теперь это могут быть возможные причины:

в вашем init: попробуйте проверить, есть ли locationServicesEnabled или нет.

locationManager = [[CLLocationManager alloc] init];
if(locationManager.locationServicesEnabled == NO){
    //Your location service is not enabled, Settings>Location Services  
}

другая причина, вы можете запретить указывать местоположение вашего приложения. Решение: просто удалите приложение с iPhone и пересоберите, теперь должно появиться всплывающее диалоговое окно «Разрешить расположение».

используйте это, чтобы проверить ошибку

- (void)locationManager:(CLLocationManager *)manager
       didFailWithError:(NSError *)error
{       
    NSLog(@"Error while getting core location : %@",[error localizedFailureReason]);
    if ([error code] == kCLErrorDenied) {
        //you had denied 
    }
    [manager stopUpdatingLocation];
}

в противном случае все кажется в порядке, вы уже работали с ios 4.0, который можно установить в iPhone 3G и более поздних версиях, если это был iPhone 2g, то эта проблема может возникнуть.

4 голосов
/ 28 января 2014

Убедитесь, что вы добавили CLLocationManager в качестве свойства.

@ свойство (неатомное, сильное) CLLocationManager * locationManager;

3 голосов
/ 21 марта 2011

Если вы тестируете это на симуляторе, оно не будет работать.

Это происходит потому, что этот метод вызывается только тогда, когда устройство меняет местоположение (а симулятор никогда не меняет местоположение).

1 голос
/ 21 марта 2011

Вызывается ли когда-нибудь -locationManager:didFailWithError: в вашем делегате? Возможно, вы в какой-то момент отказали в доступе к данным о местоположении и теперь не получаете подсказок, но доступ запрещен.

0 голосов
/ 21 марта 2011

После того, как вы alloc и init ваш менеджер местоположения, проверьте, разрешены ли услуги определения местоположения. Этот код взят из примера кода Apple "LocateMe"

if (locationManager.locationServicesEnabled == NO) {
    UIAlertView *servicesDisabledAlert = [[UIAlertView alloc] initWithTitle:@"Location Services Disabled" message:@"You currently have all location services for this device disabled. If you proceed, you will be asked to confirm whether location services should be reenabled." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [servicesDisabledAlert show];
    [servicesDisabledAlert release];
}

Если вы проводите тестирование с помощью симулятора, попробуйте выполнить тестирование на устройстве. Симулятор требует, чтобы WiFi компьютера был включен, и чтобы он мог найти базовую станцию ​​WiFi, которая находится в его базе данных известных местоположений.

...