Ios 如何使用CoreLocation在后台退出区域时重置区域中心

Ios 如何使用CoreLocation在后台退出区域时重置区域中心,ios,objective-c,core-location,cllocationmanager,region-monitoring,Ios,Objective C,Core Location,Cllocationmanager,Region Monitoring,我的想法在理论上很简单,但执行起来却很困难。我想在用户的位置创建地理围栏,当用户退出该区域时,我想在用户的更新位置重新居中该区域。以下是流程: 使用标准[CLLocationManager startUpdatingLocation]检索用户的当前位置 在locationManager:didUpdateLocations:,使用startMonitoringForRegion在当前位置创建地理围栏,然后在后续位置更新时,重新居中该区域 在locationManager:didExitRegio

我的想法在理论上很简单,但执行起来却很困难。我想在用户的位置创建地理围栏,当用户退出该区域时,我想在用户的更新位置重新居中该区域。以下是流程:

  • 使用标准[CLLocationManager startUpdatingLocation]检索用户的当前位置
  • 在locationManager:didUpdateLocations:,使用startMonitoringForRegion在当前位置创建地理围栏,然后在后续位置更新时,重新居中该区域
  • 在locationManager:didExitRegion:(通常从后台调用以唤醒应用程序)上,调用[CLLocationManager startUpdatingLocation]检索用户的当前位置以重新居中地理围栏(居中于非当前区域中心坐标的下一个更新位置)
  • 有时,这一切都是可行的,但更多的时候,土工栅栏不能正确地重新居中。正在发生的事情是,该区域重新居中,locationManager:didExitRegion:立即被调用,这会将其放入无限循环中,直到应用程序再次终止。由于该应用程序在没有有效监控区域的情况下终止,因此不会唤醒该应用程序进行位置更新

    这是否是区域监视的错误用法?我正在尝试以电池效率高的方式使用不同的方式跟踪用户位置(而不是经常使用标准的startUpdatingLocation)。将有意义的位置变化跟踪和访问监控相结合会更有效吗


    谢谢

    我的猜测是,很难比苹果更有效地跟踪用户位置。我不知道为什么你会得到无限循环(代码示例会有所帮助),但我觉得这似乎不是地理围栏的恰当使用。你能再描述一下你的用例是什么吗?这听起来很有趣。我同意,试图比苹果更有效地跟踪可能是愚蠢的。这也是CoreLocation上所有WWDC视频试图表达的观点。使用案例是,应用程序将跟踪用户的路径以进行实时路径记录(因此没有延迟更新),但用户可以选择一次开启几天,因此电池效率显然非常重要。我有自动暂停的标准监控,但在那之后,我想找到唤醒应用程序记录点的方法。