【问题标题】:What causes (and how can I fix) this odd Core Location error?是什么导致(以及如何解决)这个奇怪的核心位置错误?
【发布时间】:2011-07-03 04:33:14
【问题描述】:

ERROR,Generic,Time,320195751.128,Function,"void CLClientHandleRegistrationTimerExpiry(__CFRunLoopTimer*, void*)",注册计时器过期, 但客户仍在注册!

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

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

这个错误正在扼杀应用程序的定位功能,我不知道是什么原因造成的。它的末尾甚至还有一个感叹号,这意味着它显然是一个令人兴奋的错误。

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

【问题讨论】:

  • 我也很想知道。我已向 Apple 提交了一个错误(请参阅 this radar),但不幸的是,由于“信息不足”而关闭,因为我无法向他们发送可重现的案例。
  • 是的,重现性是最难的部分。第二天我回来了,一切都很顺利。然后又开始了。然后又停了下来。我什至不确定这是否会在调试版本之外发生。我不喜欢它偶尔会出现在发布版本中的想法。到目前为止,虽然没有成功追踪到它。
  • 所需的精度和距离是多少?您使用的是 WiFi 还是 3G?
  • 嘿,马特,你能解决这个错误吗?“注册计时器已过期,但客户端仍在注册!”。我得到同样的错误。你能和我分享你的解决方案吗
  • @NavnathMemane,不,我从未明确解决过这个问题或确定其原因。它对我来说完全停止了,所以我不再能够寻求解决方案,或者确定其他解决方案是否有效。

标签: iphone objective-c ios core-location


【解决方案1】:

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

所以...我的理论是,如果您拨打的电话导致位置管理器显示“应用需要您的位置”对话框,然后您在该对话框启动时继续拨打电话,你会得到这个错误。一旦我确认了对话框并重新运行程序,我就再也没有看到这个错误了。

希望对您有所帮助,这只是一个猜测。

【讨论】:

  • 什么是“assetFromURL”?我从来没听说过。当我开始看到这个错误时,我已经过了身份验证阶段,所以它与那个对话框没有任何关系。只是为了好玩,我尝试重置所有位置警告,然后在对话框启动时用各种消息攻击经理......并没有发生任何异常。
【解决方案2】:

除了@shillace 必须分享的内容之外,您是否可能试图在不注意用户授权状态的情况下强制更新位置?

在您知道[CLLocationManager authorizationStatus] == kCLAuthorizationStatusAuthorized 之前,请尽量推迟致电-startUpdatingLocation

【讨论】:

  • 不幸的是,这不是问题所在。我一定会留意文档中关于用户可以随时扼杀应用位置服务的警告,并采取相应行动。
  • 同意。我收到了输出“注册计时器已过期,但客户端仍在注册!”在调试一个有授权的应用程序时。
【解决方案3】:

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

【讨论】:

  • 确实如此。我最初在正常使用应用程序时注意到了这一点:没有启用断点。仅仅阅读错误的简单英文确实意味着尝试注册位置更新时花费了太长时间,但实际上,在许多位置更新已经交付之后出现错误,这似乎意味着注册已经成功。
【解决方案4】:

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

【讨论】:

    【解决方案5】:

    你实现了吗

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

    这能抓住它吗?

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

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

    【讨论】:

    • 是的,我确定要处理失败委托消息,不幸的是在这些情况下它是沉默的。
    • iOS 版本和设备系列怎么样?关于它是否或多或少发生在不同的硬件/iOS版本上的任何想法。
    • 不幸的是,我只有一个 GSM iPhone 4 可以测试,这意味着我没有关于不同硬件之间差异的信息。该错误只是偶尔出现,但自从更新到 iOS 5 测试版后我也没有看到它。我相信上次发生这种情况时我正在运行 4.2。
    【解决方案6】:

    我遇到了同样的错误,并发现这是因为我忘记提及该类在 .h 文件中实现了 CLLocationManagerDelegate。

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

    locationManager.delegate = self;
    [locationManager startUpdatingHeading];
    

    【讨论】:

    • 有趣的是,它解决了这个问题。在我的情况下,该类已正确地将自己设置为委托,并且还处理各种委托通知。
    【解决方案7】:

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

    【讨论】:

      猜你喜欢
      • 2011-05-20
      • 1970-01-01
      • 1970-01-01
      • 2021-06-25
      • 2023-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-24
      相关资源
      最近更新 更多