实现弃用方法 - CLLocation

时间:2018-04-06 08:21:42

标签: objective-c xcode

使用Xcode 9.3,我发出了新的警告。

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

现在不推荐使用此方法。"实施弃用方法"。 我有解决方案吗? 感谢

1 个答案:

答案 0 :(得分:3)

Apple Documentation on locationManager(_:didUpdateTo:from:)会告诉您使用locationManager(_:didUpdateLocations:)

因此,对于新委托locationManager(_:didUpdateLocations:)locations对象的文档说明:

  

位置

     

包含位置数据的CLLocation对象数组。此数组始终包含至少一个表示当前对象的对象   地点。如果延迟更新或多个位置到达   在交付之前,阵列可能包含其他内容   条目。数组中的对象按其中的顺序组织   他们发生了。因此,最近的位置更新是在   数组的结尾。

基本上它意味着数组中至少有1个位置,如果有多于1个,那么:

  1. locations数组中的最后一个对象将是新/当前位置
  2. locations数组中的第二个最后一个对象将是旧位置
  3. 示例(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];
        }
        //...
    }
    

    价: