iPhone CLLocation Simulator didUpdateToLocation никогда не вызывался - PullRequest
4 голосов
/ 22 февраля 2011

Я знаю, что симулятор iPhone по умолчанию находится в США, но означает ли это, что didUpdateToLocation никогда не будет вызываться?Все, что вызывается, это didFailWithError, что тоже через долгое время.Какой тайм-аут для вызова этого метода?

ps Android гораздо лучше в этом, позволяет вам подделать местоположение.

Ответы [ 5 ]

6 голосов
/ 22 февраля 2011

Да, если вы используете iPhone simulator, тогда этот didUpdateToLocation никогда не будет вызываться, потому что в случае симулятора обновление местоположения невозможно, я столкнулся с такой же ситуацией в одном из моих приложений (тестирование на симуляторе становится затруднительным), поэтому я настроил долготу и широту для симулятора в самом методе didFailWithError. Как ниже

- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError*)error{
if( [(NSString *)[[UIDevice currentDevice] model] isEqualToString:@"iPhone Simulator"] ){

        lat = 50.748129f;
        log = -2.970836f;

        return;
    }
[[LocationManager sharedManager].locationManager stopUpdatingLocation];
    [LocationManager sharedManager].isUpdating = NO;
}

Теперь вы можете протестировать свое приложение с этим местоположением, также как и в случае устройства, когда выполняется поиск вашего текущего местоположения.

Надеюсь, ты получил то, что я хочу сказать

Удачи!

3 голосов
/ 12 апреля 2012

Вы можете получать обновления didUpdateToLocation также в симуляторе.

  • Однако вы должны включить код в поток с активным циклом выполнения, например, основным потоком вашего приложения.Преимущество заключается в том, что у GPS есть время для обновления, пока пользователь щелкает в вашем приложении.:)
  • Настройка симулятора (протестировано на 5.1) Вы можете настроить симулятор (Debug> Location), например, с вашим собственным местоположением.Посетите GoogleMaps для этого.Совет: закройте симулятор, чтобы применить последние изменения!

Я добавил это в viewDidLoad основного цикла:

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

И улов результата:

- (void)locationManager:(CLLocationManager *)manager
    didUpdateToLocation:(CLLocation *)newLocation
           fromLocation:(CLLocation *)oldLocation {
       // Display location in Log
       NSLog(@"Lat= %s Lon=%f", newLocation.coordinate.latitude,
             newLocation.coordinate.longitude);
       // Stop updating, when one is enough
       [locationManager stopUpdatingLocation];
}

Надеюсь, это поможет.

1 голос
/ 26 апреля 2016

Я обнаружил странную ошибку с didUpdateLocations , которая не вызывается на симуляторе. Если вы используете пользовательское местоположение (как я), после запуска нового экземпляра симулятора iOS не сможет вернуть пользовательское местоположение, пока вы не сделаете:

Выберите «Apple» в качестве вашего местоположения: Отладка -> Местоположение -> Apple

Затем вернитесь в свое собственное местоположение: Отладка -> Местоположение -> Пользовательское местоположение

1 голос
/ 02 апреля 2012

iOS 5 теперь имеет местоположение как изменяемый параметр в симуляторе.В Симуляторе выберите меню «Отладка -> Местоположение» и выберите один из статических или динамических маршрутов определения местоположения.

Отладчик XCode также позволяет вам изменять местоположение - ищите маленькую стрелку местоположения рядом с игрой /кнопки паузы / шага, чтобы изменить местоположение справа в Xcode.

1 голос
/ 22 февраля 2011

Вы не получаете обновления местоположения на симуляторе iphone.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...