2011-02-02 7 views
10

Перед прошивкой 4.0, CoreLocation правильно отчетности высоты, теперь она всегда сообщает, как 0 футов.IOS CoreLocation Высота

-(void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation*)newLocation fromLocation:(CLLocation *)oldLocation 
{ 
    NSString *tLatitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.latitude]; 
    NSString *tLongitude = [NSString stringWithFormat:@"%3.5f", newLocation.coordinate.longitude]; 
    /* the following returns 0 */ 
    NSString *tAltitude = [NSString stringWithFormat:@"%i", newLocation.altitude]; 

    /* theres more code, but it's not relevant, 
         and this worked prior to iOS 4.0*/ 
    [manager stopUpdatingLocation]; 
} 

Не работает на устройстве, ни Simulator, не кто-либо другой опыт этот вопрос?

+0

Вы тестируете это на устройстве или на тренажере? –

+0

Прибор и симулятор. – WrightsCS

ответ

11

Если вы используете startMonitoringSignificantLocationChanges, что было новой новинкой для iOS 4.0, то вы не получите обновлений высоты. Этот режим с низким энергопотреблением использует только сотовые башни, чтобы определить местоположение пользователя, и этот метод не сообщает о высоте.

В целом, у iPhone есть три способа выяснить ваше местоположение - сотовые башни, Wi-Fi и GPS. Вы будете получать высоту только при использовании GPS. Таким образом, даже если вы задали настройку desiredAccuracy, чтобы быть действительно точной, чтобы заставить устройство использовать GPS, если пользователь находится в помещении, iPhone, вероятно, не сможет получить сигнал GPS и отступит к соте или Wi-Fi. В этом случае вы не получите высоту. Также рассмотрите пользователей, которые находятся на iPod Touch - у него есть возможность получить местоположение через Wi-Fi, и, следовательно, также не сообщит о высоте.

1

От Core Location Data Types Reference:

CLLocationDistance типа данных (тип данных для высоты) является double. Формат, который вы используете для своего stringWithFormat, - integer. Вам нужно отбросить свою высоту до integer, во-первых, или использовать форматер double (% f).

+0

Я преобразовываю высоту в целое число. Как я уже говорил, это было отлично (без изменения кода) до iOS 4.0. – WrightsCS

+0

Кроме того, способ, которым у меня есть/дал/мне идеальную высоту, используется для показа, например, 5280 футов. – WrightsCS

+0

@WrightsCS вы пробовали двойной форматировщик, как было предложено посмотреть, не изменилось ли это? – raidfive

1

Две вещи, которые вы могли бы попробовать. Прежде всего, попробуйте установить менеджера местоположения на kCLLocationAccuracyBest.

Если это не сработает, попробуйте удалить [manager stopUpdatingLocation]; и поместите NSLog в didUpdateToLocation с высотой. Иногда он должен немного сужаться, пока не отобразит высоту.

+0

kCLLocationAccuracyBest всегда был установлен, и удаление stopUpdatingLocation не влияет. – WrightsCS

0

Расположение сердечника не всегда сообщает о высоте. Обычно я проверяю нулевую высоту в методе делегата «успех». Если высота по-прежнему равна 0, я продолжаю проверять, в противном случае я перехожу к CoreLocation.

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

  • Нет связанных вопросов^_^