iPhone模拟器上的海拔高度始终为零

时间:2014-02-07 15:30:38

标签: ios cocoa-touch gps ios-simulator cllocationmanager

我正在尝试在Xcode和Simulator上开发一个高度计,但它总是在海面以上的高度返回0。 我不明白为什么,我在模拟器上尝试了很多地方。

我的代码是:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    _mapView.delegate = self;
    _locationManager = [[CLLocationManager alloc] init];
    _locationManager.desiredAccuracy = kCLLocationAccuracyBest;
    _locationManager.pausesLocationUpdatesAutomatically = YES;
    _locationManager.delegate = self;

    firstLocation = YES;
   checkUserLocation = NO;
}

- (void) locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations{
CLLocation *location = [locations lastObject];
lastLocation = location.coordinate;
_latitudeLabel.text = [NSString stringWithFormat:@"Current latitude: %f", location.coordinate.latitude];
_longitudeLabel.text = [NSString stringWithFormat:@"Current longitude: %f", location.coordinate.longitude];
_altitudeLabel.text = [NSString stringWithFormat:@"Current altitude: %f m", location.altitude];
}

我的错误在哪里?

1 个答案:

答案 0 :(得分:3)

您的代码没有任何问题,因为您使用的是模拟器。

确定海拔高度需要具有GPS功能的设备,并且您还需要在该设备上使用GPS才能获得它(即使在支持GPS的设备上,仅限wifi的位置也无法正确报告海拔高度)。 iOS模拟器没有这些功能,因此高度不准确。您需要使用带有GPS的真实设备来获取高度测量结果。

如果你想模拟一个高度的CLLocation你可以创建你的CLLocation对象并自己传递一个高度:

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
    altitude:(CLLocationDistance)altitude
    horizontalAccuracy:(CLLocationAccuracy)hAccuracy
    verticalAccuracy:(CLLocationAccuracy)vAccuracy
    timestamp:(NSDate *)timestamp

Altitude是一个只读属性,因此您需要自己创建一个新的CLLocation对象,而不是在委托回调中收到CLLocation对象时手动更改它。