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][Background][CLLocationManager]地图精度不好
CLLocationManager distanceFilter 是如何工作的?你不需要更新来知道手机在哪里吗?
CLLocationManager 未在 iOS 10.2 [Swift] 中调用 didUpdateLocation()