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

ema*_*zzi 5 gps cocoa-touch cllocationmanager ios ios-simulator

我正在尝试在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];
}
Run Code Online (Sandbox Code Playgroud)

我的错误在哪里?

fog*_*lla 5

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

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

如果您想模拟具有海拔高度的 CLLocation,您可以创建 CLLocation 对象并自行向其传递海拔高度:

- (id)initWithCoordinate:(CLLocationCoordinate2D)coordinate
    altitude:(CLLocationDistance)altitude
    horizontalAccuracy:(CLLocationAccuracy)hAccuracy
    verticalAccuracy:(CLLocationAccuracy)vAccuracy
    timestamp:(NSDate *)timestamp
Run Code Online (Sandbox Code Playgroud)

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