10

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

不在设备或模拟器上工作,是否有其他人遇到此问题?

4

4 回答 4

12

如果您使用startMonitoringSignificantLocationChanges的是 iOS 4.0 的新功能,那么您将不会获得高度更新。这种低功耗模式仅使用手机信号塔来确定用户的位置,并且这种方法不报告高度。

更一般地说,iPhone 有三种方法可以确定你的位置——手机信号塔、Wi-Fi 和 GPS。只有在使用 GPS 时,您才能获得高度。因此,即使您将desiredAccuracy设置设置得非常精确以强制设备使用 GPS,如果用户在室内,iPhone 也可能无法获得 GPS 信号,并且会退回到手机或 wi-fi。在这种情况下,您将无法获得高度。还要考虑使用 iPod Touch 的用户——它只能通过 wi-fi 获取位置,因此也不会报告高度。

于 2012-01-27T03:30:44.960 回答
2

你可以尝试两件事。首先,尝试将位置管理器设置desiredAccuracykCLLocationAccuracyBest.

如果这不起作用,请尝试删除[manager stopUpdatingLocation];,然后将 aNSLog放入didUpdateToLocation海拔高度。有时它需要在显示高度之前缩小一点。

于 2011-02-02T04:17:41.887 回答
1

核心位置数据类型参考

CLLocationDistance数据类型(高度的数据类型)是double. 您使用的格式化程序stringWithFormatinteger. 您需要将您的高度转换为integer, first 或使用double(%f) 格式化程序。

于 2011-02-02T03:31:27.887 回答
0

核心位置并不总是立即报告高度。我通常在我的“成功”委托方法中检查零高度。如果高度仍然是 0,我会继续检查,否则,我会打开 CoreLocation。

于 2011-05-31T13:32:10.527 回答