我是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