Yog*_*ton 66 objective-c core-location cllocationmanager ios swift
随着iOS6的发布,Apple希望我们使用didUpdateLocations而不是didUpdateToLocation.谁能解释如何正确使用didUpdateLocations?
Ann*_*nne 126
我认为您使用以下代表获得最后一个职位?
- (void)locationManager:(CLLocationManager *)manager
didUpdateToLocation:(CLLocation *)newLocation
fromLocation:(CLLocation *)oldLocation
Run Code Online (Sandbox Code Playgroud)
上面的代理在iOS 6中已弃用.现在应该使用以下代码:
- (void)locationManager:(CLLocationManager *)manager
didUpdateLocations:(NSArray *)locations
Run Code Online (Sandbox Code Playgroud)
为了获得最后一个位置,只需获取数组的最后一个对象:
[locations lastObject]
Run Code Online (Sandbox Code Playgroud)
换句话说,[locations lastObject]
(新代表)等于newLocation
(旧代表).
pro*_*rmr 64
这里没有其他答案解释为什么有一个位置数组以及如何正确使用提供的新的didUpdateLocations:数组.
弃用locationManager:didUpdateToLocation:fromLocation:
和发送NSArray位置的目的是降低在后台运行时的功耗.
从iPhone 5开始,GPS芯片能够存储一段时间的位置,然后在阵列中一次性传送它们.这称为延迟位置更新.这允许主CPU在后台睡眠更长的时间.这意味着iOS不必为每个位置更新启动主CPU,CPU可以睡眠,而GPS芯片收集位置.
您可以使用该deferredLocationUpdatesAvailable
方法检查此功能.如果可用,您可以使用allowDeferredLocationUpdatesUntilTraveled:timeout:
方法启用它.有些条件适用,详情请参阅此答案.
Jan*_*mal 22
它为您提供了一组对象,可以访问您可以使用的最后位置
[locations lastObject]
Run Code Online (Sandbox Code Playgroud)
来自这个委托方法
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
Run Code Online (Sandbox Code Playgroud)
这就是如何实现该方法以与已弃用的方法类似地工作
- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations
{
CLLocation *newLocation = locations.lastObject;
CLLocation *oldLocation;
if (locations.count > 1) {
oldLocation = locations[locations.count - 2];
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
38113 次 |
最近记录: |