我想知道是否有人可以使用核心位置解释应用程序的流程。我正在构建一个GPS应用程序,它将暂停(在用户设置的给定延迟之后),然后运行迭代(也由用户设置)。但我发现它无限期地运行。如果我从代码中取出for循环,那么在第一次搜索时,我会从位置管理器获得2个响应。
实际上这是:用户按下"获取位置"按钮。然后调用我们的getlocation函数但是它通过这个循环两次并通过NSLog输出我将始终看到2个响应但仅在第一个循环上。
答案 0 :(得分:0)
获取位置更新是一个异步项目,您需要等待,然后过滤结果。流程是:
创建位置管理器并将对象设置为委托。 要求它开始更新您的位置 返回。
然后您将开始接收位置更新。第一个可能是“陈旧的”(其上的时间戳将来自GPS上次激活的时间。)使您的代码拒绝任何位置更新谁的时间戳比现在大1/2秒以上解决此问题。
接下来,您将收到一系列位置更新,其中包含非常糟糕(不可接受的)水平精度读数。检查准确度读数并拒绝所有不够准确的读数。 (精度读数实际上是一个半径值,它定义了一个位置可能的圆,用米表示。更小更好。)
准确度的准确程度取决于您的需求。如果您无法在合理的时间内(例如30秒)获得足够准确的读数,请确保编写一个放弃的超时并向用户显示“无法获得准确的读数”消息。
如果您最近获得的报告足够准确或超时,请停止更新,直到您下次需要修复位置时(或者如果您的应用需要,请继续更新。)
你可能想要编写一个测试应用程序,当它们进来时显示时间戳,地图位置,准确度读数等,然后在手机运行时随身携带。要获得一种能够按照您需要的方式过滤位置更新的算法需要相当多的修改。