是什么原因(以及如何修复)这个奇怪的核心位置错误?

ERROR,Generic,Time,320195751.128,Function,“void CLClientHandleRegistrationTimerExpiry(__ CFRunLoopTimer *,void *)”,注册计时器已过期,但客户端仍在注册!

我只能在更广泛的互联网上挖掘出这个问题,并且没有人提供有用的信息。 这是上下文:

我有一个应用程序通过CLLocationManager的startUpdatingLocation方法监视设备的位置。 它开始监视,运行一段时间,然后在调试输出中弹出此消息。 从那时起,不再提供位置更新。

这个错误正在扼杀应用程序的位置function,我对可能导致它的原因感到茫然。 它甚至在最后都有一个感叹号,这意味着它显然是一个令人兴奋的错误。

更新:
虽然我从来没有找到问题的解决方案,或者弄清楚为什么它首先发生,但我也失去了重现它的能力。 这似乎发生在我做了很多事情的一段时间内,包括代码结构的一般变化,然后更新到iOS 5 beta。 似乎有些东西让我沉默了。

你实施了吗?

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

这抓住了吗?

你需要在正常运行的东西中检查kCLErrorNetwork,kCLErrorDenied,kCLErrorHeadingFailure和kCLErrorLocationUnknown,但是我想知道代理是否仍然可以捕获其他错误?

这可以让您有机会停止然后重新启动位置服务。

关于@schillace必须分享的内容,您是否有可能在不考虑用户授权状态的情况下强制更新位置更新?

尝试推迟调用-startUpdatingLocation直到您知道[CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized

我不知道这是不是答案,但这里有一个提示……我正在使用assetFromURL,而且我正在从资产库加载图像时出现间歇性故障。 所以我写了一些代码来测试一个理论,它可以非常快速地加载库中的每个url。 我开始用这段代码看到这个错误。

所以……我的理论是,如果你打电话导致位置管理员显示“应用程序想要你的位置”对话框,然后你在对话框启动时继续打电话 ,你就会收到这个错误。 一旦我确认了对话框并重新运行程序,我就不再看到这个错误了。

希望有所帮助,这只是猜测。

你确定这是一个问题吗? 在我注册到位置管理器完成之前,我认为你正在调试断点(有效地暂停应用程序)。 同时,计时器到期,您还没有完成注册。 如果您取出断点,该消息是否会出现?

你在主线程上做位置的东西吗? 我从后台线程中获得了CLLocation API调用的各种奇怪问题。 我将几个关键的设置调用移动到主线程中,然后一切正常。

我得到了同样的错误并且发现它是因为我忘了提到该类在.h文件中实现了CLLocationManagerDelegate。

将CLLocationManagerDelegate添加到头文件,以及指向委托的以下行为我解决了错误。

 locationManager.delegate = self; [locationManager startUpdatingHeading]; 

我在LocateMe中实现超时(延迟后执行选择器)时得到了这个,我之前的代码使用了另一种方法。 我不知道这是否是一个线索。