在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];
}
不在设备或模拟器上工作,是否有其他人遇到此问题?
答案 0 :(得分:12)
如果您使用的是startMonitoringSignificantLocationChanges
,这是iOS 4.0的新功能,那么您将无法获得高度更新。此低功耗模式仅使用手机信号塔来确定用户的位置,此方法不报告高度。
更一般地说,iPhone有三种方法可以确定您的位置 - 手机信号塔,Wi-Fi和GPS。您只能在使用GPS时获得高度。因此,即使您将desiredAccuracy
设置设置为非常精确以强制设备使用GPS,如果用户在室内,iPhone可能无法获得GPS信号并且将回退到小区或wi网络连接。在这种情况下,你将无法获得高度。还要考虑使用iPod Touch的用户 - 它只能通过Wi-Fi获取位置,因此也不会报告高度。
答案 1 :(得分:2)
你可以尝试两件事。首先,尝试将位置管理器的desiredAccuracy
设置为kCLLocationAccuracyBest
。
如果不起作用,请尝试删除[manager stopUpdatingLocation];
,并将NSLog
放入didUpdateToLocation
高度。有时它需要在显示高度之前缩小一点。
答案 2 :(得分:1)
来自Core Location Data Types Reference:
CLLocationDistance
数据类型(海拔高度的数据类型)是double
。您用于stringWithFormat
的格式化程序是integer
。您需要先将高度转换为integer
,或使用double
(%f)格式化程序。
答案 3 :(得分:0)
核心位置并不总是立即报告高度。我通常在“成功”委托方法中检查零高度。如果海拔高度仍为0,我会继续检查,否则,我会转向CoreLocation。