CLLocationManager 如何根据 iOS 版本调用正确的委托方法

Posted

技术标签:

【中文标题】CLLocationManager 如何根据 iOS 版本调用正确的委托方法【英文标题】:How can CLLocationManager call correct delegate methods depending on iOS version 【发布时间】:2012-11-27 14:25:52 【问题描述】:

ios 5 中,委托方法是

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation

在 iOS 6 中的方法是

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations

我的应用支持这两个版本。 CLLocation 管理如何知道它应该调用哪个方法? 我需要添加一些 #if def 吗?如果是的话,谁能告诉我我该怎么写这个。 提前致谢。

【问题讨论】:

【参考方案1】:

你可以使用

- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation;

您可以使用 iOS 6 SDK 进行构建,并将部署目标设置为也支持 iOS 5。如果它不起作用,您可以尝试实现此方法并在其中调用- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations (您也可以实现此iOS 6方法,以便在iOS 6的情况下直接调用此方法)。您可以从 newLocation 和 oldLocation 创建一个数组并传递给它。但我不认为这将是必要的。您可以在两种设备上进行测试。

【讨论】:

以上是关于CLLocationManager 如何根据 iOS 版本调用正确的委托方法的主要内容,如果未能解决你的问题,请参考以下文章

如何判断 CLLocationManager 是不是正在主动扫描信标?

iOS 8 中的 CLlocationManager 问题

[iOS][Background][CLLocationManager]地图精度不好

CLLocationManager distanceFilter 是如何工作的?你不需要更新来知道手机在哪里吗?

CLLocationManager 未在 iOS 10.2 [Swift] 中调用 didUpdateLocation()

iOS CLLocationManager 定位