我稍微简化了问题。当我在应用程序中创建和添加区域并询问这些区域的状态时,我在中看到以下内容monitoringDidFailForRegion
方法:
The operation couldn’t be completed. (kCLErrorDomain error 4.)
检查CLErrorDomain 常量我看到错误 4 是kCLErrorRegionMonitoringDenied
它是这样描述的:
Access to the region monitoring service was denied by the user.
这怎么可能?这是我的设置和我检查过的内容:
- 我正在通过 Xcode 来查看日志语句。
- 我已连接到 iPhone 5。我没有在模拟器中运行。
- 我已确保半径的大小足以进行监控(尽管这并不重要)。
- 我已确保我的设备已打开“设置”>“隐私”>“位置服务”and my app.
- 我阅读了苹果发布的所有核心位置和区域监控文档。
- 我已确保 WiFi 已打开并且蜂窝信号较强。如果我不这样做,它首先就无法找到我的位置。
- 我已确保
didChangeAuthorizationStatus
报告正确的状态:kCLAuthorizationStatusAuthorized
- 我确保在添加我的区域后,监视实际上是通过观察对方法的调用开始的
didStartMonitoringForRegion
.
我缺少什么?当定位服务明确启用时,为什么我会看到此错误?
于是,我又看了一遍区域监控文档我在列表中突出显示的项目中注意到了这一点:
确定区域监控的可用性
在尝试监视任何区域之前,您的应用程序应检查当前设备是否支持区域监视。区域监控可能不可用的原因有多种:
- 该设备可能没有支持区域监控所需的硬件。
- 用户可能拒绝了应用程序使用区域监控的授权。
- 用户可能在“设置”应用中禁用了位置服务。
- 用户可能在“设置”应用程序中为设备或您的应用程序禁用了后台应用程序刷新。
- 设备可能处于飞行模式并且无法启动必要的硬件。
然后我检查了后台应用程序刷新(iOS 7 的一项新功能:设置>常规>后台应用程序刷新)是否已打开并且可用于我的应用程序。不是。我打开了该功能,我的区域现在正在报告其状态。
令人困惑和误导的是:
[CLLocationManager isMonitoringAvailableForClass:[CLRegion class]] returns YES
...即使后台应用程序刷新被禁用。我认为它会返回NO。
UPDATE:
我已向 Apple 发送了错误报告添加了开放雷达对于这个问题。
2014 年 11 月 3 日更新:
苹果已确认这是一个错误。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)