我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?

Posted

技术标签:

【中文标题】我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?【英文标题】:Should I send [locationManager stopUpdatingLocation] in locationManager:didFailWithError:? 【发布时间】:2012-05-30 17:39:15 【问题描述】:

如果newLocation 足够准确,我的应用程序使用启动CLLocationManager 然后从locationManager:didUpdateToLocation:fromLocation: 调用stopUpdatingLocation 的典型模式。我的问题是我是否也需要打电话

[locationManager stopUpdatingLocation];

locationManager:didFailWithError:。苹果文档说

如果定位服务无法立即检索位置,它会报告kCLErrorLocationUnknown 错误并继续尝试。在这种情况下,您可以简单地忽略错误并等待新事件。

如果用户拒绝您的应用程序使用定位服务,此方法会报告kCLErrorDenied 错误。收到此类错误后,您应该停止定位服务。

在前一种情况下,我不应该调用stopUpdatingLocation,因为位置管理器可能仍然会发出一个好的位置。其他情况呢?我的应用在尝试使用定位服务之前总是检查[CLLocationManager locationServicesEnabled][CLLocationManager authorizationStatus],所以我真的需要处理kCLErrorDenied 的情况吗?如果出现任何其他错误,定位服务会自动停止吗?

【问题讨论】:

【参考方案1】:

首先,我认为您应该处理大多数错误情况。特别是如果它像这个一样容易处理。 ;-) 如果用户已授予访问权限并使用您的应用程序会发生什么。在应用程序运行时,她执行多项任务并更改为 settings.app 以禁用定位服务;一般或专门针对您的应用程序。然后您已经检查了授权并使用位置更新,但突然您不再被授权。我想这正是您要问的情况,对吧?

【讨论】:

以上是关于我应该在 locationManager:didFailWithError: 中发送 [locationManager stopUpdatingLocation] 吗?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我应该使用单独的测试目标来运行 XCTests,我应该怎么做?

我应该在 __main__.py 中使用啥形式的导入,然后我应该如何运行项目?

我应该如何在两个片段中使用 ViewModel?

我啥时候应该销毁令牌[关闭]

我应该将 Angularjs 文件保存在我的 Web 应用程序中的啥位置,我应该如何构建我的路由和资源? [关闭]

我应该允许“。”在网址中?