我是iOS新手,有一个基本问题。直到现在,我通过在locationManager对象中打开位置更新来获取iPhone的位置。之后,我的代码结束了,并且当委托方法didUpdateLocations被调用时,我得到了位置。获取iPhone位置更新而不终止当前代码线程
但现在我想获得一个位置更新,做它从一个代码序列中是这样的:1
线:无论
线路2:无论
3号线:不管
4行:[的LocationManager requestLocation]
第5行:等待位置进行更新
6号线:使用新的位置信息
7号线:无论
等
但我意识到,didUpdateLocations不会被调用,而上面的线是在“等待位置更新“。
处理这种情况的正确方法是什么?
我是否需要以某种方式请求位置更新发生在另一个线程上,以便我上面的线程可以保持并行运行?
感谢,
史蒂夫
新编辑:
比方说,我这样做didUpdateLocations内:上一个全局变量设置一个标志,表明该位置已经被更新(即locationUpdated = 1)并设置location = updated_location。
然后在第5行(上面的例子)我等待locationUpdated == 1.然后在第6行我可以使用“位置”变量。
这样写代码有意义吗?
在我的实验中,如果我等待循环轮询locationUpdated == 1,它将阻止didUpdateLocations被调用。所以也许这是GrandCentralDispatch将等待循环放入不同线程的工作?我从来没有用过它。
当位置正在更新时,您是否需要线程暂停?或者您是否希望位置更新在后台进行,同时在调用位置更新后继续正常执行程序? –
位置更新将始终以异步方式传递给委托方法。你不需要主动“等待”。一旦委托方法被调用,你就可以做任何事情。您可能需要向用户提供正在进行处理的一些指示。 – Paulw11
我想我的代码暂停,直到我有一个有效的位置修复程序。我想在下一行代码中使用该位置信息(在我的示例中为第6行)。我可以从didUpdateLocation方法内更新一个全局变量(包含位置),第6行将会看到这个变量的更新值。听起来像是我的并发...我还没有用过的东西。 – Morocco5