ios - Region Monitoring 监听的 "region"个数,iOS7根据用户当前位置

标签 ios mapkit core-location geofencing region-monitoring

我正在从事这样一个项目,其中应用程序执行以下操作:

  1. 用户选择一个半径(10 米到 1000 米),然后按“Go”按钮转到下一个 viewController
  2. 这里的应用程序抓取用户当前位置,并根据当前位置和选定的半径开始“区域监控”
  3. 如果用户越过特定边界(10 米到 1000 米),它会发出“ExitRegion”警告消息。并根据用户新的当前位置重新启动“区域监控”。应用程序一直在执行此操作,无论是前台模式还是后台模式。我设法做到了,而且效果很好。

现在,我在这里监视一个区域,然后再监视另一个区域。所以这个数字实际上是一个。但我知道一个应用程序可以通过“区域监控”监控的最大区域数是 15。现在我的问题是在这种情况下我是否应该处理这个最大区域数问题?如果是,那么如何?

我还想补充一点,有一些解决方案,只适用于 iOS 6 及更早版本。因此,如果有一些解决方案可以根据用户在 iOS7 中的当前位置处理由“RegionMonitoring”监控的“区域”数量,请告诉我。

如果有人能给出答案或任何建议来完成我的应用所需的要求,我将非常高兴。

最佳答案

如果你查看文档,最大限制是 20。当你超过这个数字时,iOS 将释放对最旧区域的监控(认为它就像一个 FIFO 队列)。确保半径小于 maximumRegionMonitoringDistance。所以换句话说,您无需担心最大限制,您可以通过实现 didStartMonitoringForRegion: 委托(delegate)来确保这一点。

但是,如果您想控制自己监控的区域数量,您可以随时使用 stopMonitoringForRegion 停止监控区域: 您可以使用属性 获取正在监控的区域列表监控区域。您可以随时清除不再需要的区域。最好将它保持在最低限度,因为它会影响电池和应用程序性能。

我正在使用以下代码在需要时清除我的所有区域。

for (CLCircularRegion *region in self.locationManager.monitoredRegions) {
    [self.locationManager stopMonitoringForRegion:region];
}

但在您的情况下,我建议对区域标识符使用常量(例如“我的区域”),因为您无法监控两个具有相同标识符的区域,添加另一个具有相同 ID 的区域会自动删除先前监控的区域。

CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50.0f identifier:@"MY-REGION"];
[self.locationManager startMonitoringForRegion:region];

关于ios - Region Monitoring 监听的 "region"个数,iOS7根据用户当前位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21850536/

相关文章:

ios - AVAudioplayer 无法在 iOS 5 中播放 iPod 库中的歌曲

ios - 静态变量为零 - Objective C

ios - 如何正确旋转 map 上的叠加层?

ios - Xcode/Objective-C - 通过prepareForSegue传递数据

iphone - 检查用户是否在位置边界

objective-c - CoreLocation框架: Does locationManager send a message with filled in parameters everytime it logs a new location?

ios - TWICE相关实体的CoreData计数记录

ios - 如何在 iOS 中通过 map-kit 在两点之间绘制折线?

ios - 调用 didEnterRegion 时,didUpdateLocations 不再被调用

ios - 具有 T-Z 时间格式的 NSDateFormatter