【问题标题】:CLLocationManager initializationCLLocationManager 初始化
【发布时间】:2011-11-16 07:49:51
【问题描述】:

我正在开发一个 Web 应用程序,该应用程序允许用户仅在特定位置登录。我正在使用 CLLocationManager,我在 AppDelegate -didFinishLaunchingWithOptions 初始化并调用了 startUpdatingLocation。我的 UIWebView 应该在初始化时提取位置以确定用户是否在指定位置内。但是,在我的应用程序启动时,[locationManager location] 始终为 null 并且更新之后我的 UIWebView 被初始化并显示,因此已经向用户发送了一条错误消息。

如何让我的 locationManager 在初始化时更新其位置?

【问题讨论】:

    标签: objective-c ios cllocationmanager


    【解决方案1】:

    听起来您已经正确编码了位置信息。您缺少(但已经看到)的是更新肯定不会立即发生。您需要在位置信息可用时“控制” UI 的其余演示文稿(即您的 web 视图)。有很多方法可以做到这一点。一种常见的策略是向用户展示一个全屏的“HUD”或面纱,其中包含一些应用程序正在初始化或定位它们的指示器(带有活动指示器,也总是一个很好的接触。)在其后面(看不见给用户)您可以等待定位结果,然后启动相应的 UI 更新,然后揭开面纱。

    其中任何一个有意义或给你一些想法?我已经做过很多次了。将异步活动(如位置更新)与有意义的实时 UI 更新同步可能具有挑战性,但并非不可能。 :-)

    【讨论】:

    • 后续问题,如何判断 locationManager 何时获取到位置或何时仍在更新?
    • 也许你没有正确编码你的位置更新... :-) 当你调用 startUpdatingLocation 时,一个异步进程开始执行此操作。创建CLLocationManager 对象时,应将其delegate 设置为self。然后,您需要实现在实际更新位置时调用的CLLocationManagerDelegate 方法(如果更新失败,则有一个方法。)当这些委托方法被调用时,您就知道您有(或没有) ,在失败的情况下)更新的位置信息。
    • 我已将delegate 设置为self 并正在使用locationManager:didUpdateToLocation:fromLocation(目前表明它在我实际需要该位置后已更新)。但是,locationManager:didFailWithError 永远不会被调用(或者我只是不知道它何时被调用)。还是我应该改用其他方法?
    • 不,听起来你说得对。因此,当应用程序启动时,您需要向用户显示应用程序正在初始化——正在做某事——仅此而已,同时等待位置更新完成(或失败)。此时,在您实现的那些委托方法中,您可以继续进行 UI 初始化,例如移除“面纱”(或您决定向用户展示的任何内容)并将其替换为基于位置的数据或错误或您想要的任何内容。
    【解决方案2】:

    您需要在应用程序 UI 中考虑初始 nil 值并等待第一次位置更新。

    -位置

    讨论
    如果没有位置数据,则此属性的值为 nil 曾经被找回。

    检查当前位置的时间戳是个好主意 回来。如果接收器当前正在收集位置数据,但是 最小距离过滤器很大,返回的位置可能是 比较老。如果是,您可以停止接收器并重新启动它 强制更新

    您还应该查看Region Monitoring,因为您希望您的用户只能在特定位置登录。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 2014-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多