iOS 9-LocationManager更新位置过于频繁
我正在将一个现有的应用程序迁移到iOS 9上,没有太多的更改,只是将ATS添加到iOS 9-LocationManager更新位置过于频繁,ios,objective-c,core-location,cllocationmanager,ios9,Ios,Objective C,Core Location,Cllocationmanager,Ios9,我正在将一个现有的应用程序迁移到iOS 9上,没有太多的更改,只是将ATS添加到info.plist中,并使用MKAnnotationView而不是MKPinAnnotationView在地图上定制PIN。问题是在开始测试更改时,我注意到位置更新过于频繁,即使在我站着不动的时候。位置管理器的初始化方式没有任何更改 下面是日志的一个小样本 2015-09-25 12:16:25.462 MyApp[2009:911066] location: <+39.09040164,-77.525407
info.plist
中,并使用MKAnnotationView
而不是MKPinAnnotationView
在地图上定制PIN。问题是在开始测试更改时,我注意到位置更新过于频繁,即使在我站着不动的时候。位置管理器的初始化方式没有任何更改
下面是日志的一个小样本
2015-09-25 12:16:25.462 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time
2015-09-25 12:16:25.464 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time
2015-09-25 12:16:25.468 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time
2015-09-25 12:16:25.475 MyApp[2009:911066] location: <+39.09040164,-77.52540765> +/- 65.00m (speed -1.00 mps / course -1.00) @ 9/25/15, 12:16:25 PM Eastern Daylight Time
我想问题是:我的实现是否有问题,或者核心位置API中是否有忽略距离过滤器的更改?在
locationManager:didUpdateLocations:
方法中,CLLocationManager
的distanceFilter
属性正在根据速度重置,在iOS 9
中,这似乎会触发一个新的位置更新(返回上一个已知位置),从而在几秒钟内产生数百个新位置更新。是否将CLLocationManager
上的pauseslocationupdates属性设置为YES
?如果设置为YES
,则在位置数据不太可能更改的情况下,通过禁用位置更新有助于提高电池寿命。@MatteoPacini在代码中的任何一点上都不会设置为NO
,默认值为YES
。我将尝试显式地将其设置为YES
。谢谢。@MatteoPacini我试过了,没什么区别。谢谢,真有趣。一旦你有能力,你应该接受你自己的答案,让其他读者知道问题已经解决。我看到了同样的结果,但我不会在启动locationmanager后更改任何内容。你能看一看吗?@sjoerdperforfs我想我们与CLLocationManager
的问题有点不同,我的问题不是位置数据不正确,而是更新频率极高。
locationManager = [CLLocationManager new];
locationManager.delegate = self;
locationManager.distanceFilter = 25.0f;
[locationManager setDesiredAccuracy:kCLLocationAccuracyBest];
if ([locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
[locationManager requestAlwaysAuthorization];
}
[locationManager startUpdatingLocation];