使用Xcode 9.3,我发出了新的警告。
- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation *)newLocation fromLocation:(CLLocation *)oldLocation
现在不推荐使用此方法。"实施弃用方法"。 我有解决方案吗? 感谢
答案 0 :(得分:3)
Apple Documentation on locationManager(_:didUpdateTo:from:)
会告诉您使用locationManager(_:didUpdateLocations:)
因此,对于新委托locationManager(_:didUpdateLocations:)
,locations
对象的文档说明:
位置
包含位置数据的CLLocation对象数组。此数组始终包含至少一个表示当前对象的对象 地点。如果延迟更新或多个位置到达 在交付之前,阵列可能包含其他内容 条目。数组中的对象按其中的顺序组织 他们发生了。因此,最近的位置更新是在 数组的结尾。
基本上它意味着数组中至少有1个位置,如果有多于1个,那么:
locations
数组中的最后一个对象将是新/当前位置locations
数组中的第二个最后一个对象将是旧位置示例(Swift 4 +):
func locationManager(_ manager: CLLocationManager, didUpdateLocations locations: [CLLocation]) {
let newLocation = locations.last
let oldLocation: CLLocation?
if locations.count > 1 {
oldLocation = locations[locations.count - 2]
}
//...
}
示例(目标-C):
-(void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray<CLLocation *> *)locations {
CLLocation *newLocation = locations.lastObject;
CLLocation *oldLocation;
if (locations.count > 1) {
oldLocation = locations[locations.count - 2];
}
//...
}
价: