延迟位置更新问题ios

我一直在尝试在过去两天在应用中实施延迟位置更新。 我面临的问题是

- (void)locationManager:(CLLocationManager *)manager didUpdateLocations:(NSArray *)locations 

即使在我调用之后,方法也会被调用

  [self.locMgr allowDeferredLocationUpdatesUntilTraveled:(CLLocationDistance)200 timeout:(NSTimeInterval)25]; 

方法。

虽然我不得不说

  - (void)locationManager:(CLLocationManager *)manager didFinishDeferredUpdatesWithError:(NSError *)error 

在我使用allowDeferredLocationUpdatesUntilTraveled方法指定的25秒后完全调用,错误代码= null。

我从文档中了解到,仅在25秒后才会调用didUpdateLocations。 任何帮助将非常感激。

我一直在努力解决同样的问题,我可能已经找到了解决这个问题的答案 – 至少它可以解决我的问题并获得延期更新,对我来说始终如一。 我按照上面列表中的所有步骤操作,无论我做了什么,位置更新都不会推迟。 在我看来,我可能有其他运行的应用程序不允许系统睡眠,所以我杀死了多任务托盘中的所有其他应用程序。 我再次运行我的示例应用程序……它工作了! 但故事并没有就此结束。 我稍后再试一次,即使多任务托盘中没有其他应用程序运行,我也无法获得推迟的位置服务。 然后我发现我的手机上有一个名为“Moves”的应用程序,即使你手动杀死它也能保持活力。 我不完全确定当你杀死它时,Move会如何神奇地恢复生机,但确实如此(可能使用蓝牙和应用程序保存/恢复服务)。 即使它处于活动状态并跟踪您的位置,它也不会出现在多任务托盘中。 我认为只有手动启动的应用程序会出现在托盘中 – 如果操作系统启动应用程序,则它不会出现在托盘中。 但我离题了…我能够通过禁止Moves使用位置服务来获得延期位置服务以在我的应用程序中一致地工作。 当我这样做时,Moves抱怨,即使它不在多任务托盘中。 似乎如果另一个应用程序正在使用位置服务(而不是推迟),您的应用程序也不会推迟。

根据适用于iOS 6.0 SDK的Apple Developer论坛,仅提供延期位置更新:

  • 在iPhone 5硬件上
  • 运行iOS 6.0或更高版本
  • 所需精度设置为kCLLocationAccuracyBest
  • 调用“startUpdatingLocation”方法
  • 等待位置更新以大约每秒1进入
  • 然后开始推迟更新

请参阅: https : //devforums.apple.com/message/751974#751974

所以听起来你需要iPhone 5硬件,并等待位置更新以1Hz的速度进入。