IOS CoreLocation Высота

До iOS 4.0, CoreLocation правильно сообщал высоту, теперь он всегда сообщает как 0 фут.

-(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 not relevant, 
                      and this worked prior to iOS 4.0*/
    [manager stopUpdatingLocation];
}

Не работает на устройстве или симуляторе, кто-нибудь еще испытывает эту проблему?

Ответ 1

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

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

Ответ 2

В Справочная информация о типах базовых данных:

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

Ответ 3

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

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

Ответ 4

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