RegionMonitoring监控的"区域"数,基于用户在iOS7中的当前位置

Tul*_*lon 5 core-location mapkit ios geofencing region-monitoring

我正在开发这样一个应用程序执行以下操作的项目:

  1. 用户选择半径(10米到1000米),然后viewController按"开始"按钮转到下一个
  2. 在这里,应用程序抓取用户当前位置并根据具有所选半径的当前位置开始"区域监视"
  3. 如果用户越过该特定边界(10米到1000米),则它会发出"ExitRegion"警报消息.并根据用户新的当前位置再次启动"区域监控".应用程序一直在这样做,包括前台和后台模式.我设法做到这一点并且工作得很好.

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

我想补充的另一件事是,它有一些解决方案,它只适用于iOS 6及更早版本.所以请根据用户在iOS7中的当前位置,通过"RegionMonitoring"监控处理"区域"数量的解决方案,让我知道.

如果能够给出答案或任何建议来完成我的应用程序所需要求,我将感到非常高兴.

Zee*_*Zee 6

如果检查文档,则最大限制为20.当您超过此数字时,iOS将释放对最旧区域的监视(将其视为FIFO队列).确保半径小于maximumRegionMonitoringDistance.换句话说,您不必担心最大限制,您可以通过实现didStartMonitoringForRegion:委托来确保这一点.

但是,如果要控制自己监视的区域数,可以始终停止使用区域监视区域.stopMonitoringForRegion:您可以获取使用该属性监视的区域列表monitoredRegions.您可以随时清理不再需要的区域.保持最小化是一个很好的做法,因为它会影响电池和应用程序的性能.

我正在使用以下代码在需要时清理所有区域.

for (CLCircularRegion *region in self.locationManager.monitoredRegions) {
    [self.locationManager stopMonitoringForRegion:region];
}
Run Code Online (Sandbox Code Playgroud)

但在您的情况下,我建议使用区域标识符的常量(例如"MY-REGION"),因为您无法监视具有相同标识符的两个区域,添加具有相同ID的其他区域会自动删除先前监视的区域.

CLCircularRegion *region = [[CLCircularRegion alloc] initWithCenter:coordinate radius:50.0f identifier:@"MY-REGION"];
[self.locationManager startMonitoringForRegion:region];
Run Code Online (Sandbox Code Playgroud)