2011-12-19 71 views
0

當前我正在構建一個應用程序,該應用程序根據當前位置顯示附近的廣告。當用戶第一次啓動應用程序時,我希望他們看到附近廣告的前10名。IOS位置找到檢測

我在按時提取位置時遇到輕微問題。我的問題是在視圖加載之前尚未獲取當前位置。 當然有委託UpdatedLocation,但這個被多次觸發。我想它會多次觸發,因爲它想要獲取最準確的位置?

所以我的問題是,我可以做些什麼來「等」,直到找到位置,然後開始搜索廣告?

在此先感謝!

問候, Mittchel

+0

顯示一些說明位置正在確定的文本,以及一個微調。一旦你有了一個位置,展示真實的視圖。或者我錯過了什麼? – DarkDust 2011-12-19 13:09:47

+0

是的,就像我說它找到了多個位置,所以我如何確定哪一個(最後一個)是我需要的? – Mittchel 2011-12-19 13:11:26

回答

1

您應該更新每次你得到一個(更準確)位置時的視圖。因此,請記住上一個位置,並檢查horizontalAccuracy/verticalAccuracy是否減少(更小=更準確,但負=無效)。甚至更新每次你得到一個新的位置會更好,因爲準確性可能不會改變,但位置(用戶正在移動)。

如果你只是顯示一個列表,你應該記住以前的結果。獲取新結果,如果它們不同,請更新您的列表。

+0

那是什麼給了我這個問題,我無法每次更新視圖。在我的ViewDidLoad中,我獲取結果(並且我想這樣)。這意味着,如果我每次更新視圖時總會試圖獲取結果.. – Mittchel 2011-12-19 13:23:53

+0

@Mittchel:那麼在你有足夠好的位置數據之前不要加載視圖。 – progrmr 2011-12-19 16:58:42

1

當CLLocationManager從Core Location系統獲取更新命中時,它觸發其代理的didUpdateToLocation:fromLocation:方法。在該方法中,您希望在獲取更新的位置時執行任何操作。

對於您的情況,您需要檢查新位置的.horizontalAccuracy屬性,以確保它是高質量的結果。你也可能想要挑選前幾名,因爲CL會給你最後一次位置會話的最後一擊,作爲你的第一次點擊。

無論哪種方式,這是你想要取數據的方法。

+0

我會試一試,謝謝。但是我怎樣才能確定它是最新更新的位置? – Mittchel 2011-12-19 13:28:27

+0

@Mittchel:沒有LAST更新的位置,您可以隨時準確無誤地更新或更改位置。如果足夠好,請調用'stopUpdatingLocation'並使用您擁有的。 – progrmr 2011-12-19 17:06:07

1

沒有一個位置,您可以從CL,一個緩衝,然後得到別人的一系列位置精度隨時間改變,變得更好(或更糟)的精度,採取任何地方從1秒到10分鐘。

CL將首先給你一個緩存的位置,這可能足以滿足你的目的。如果它不是太老(< 60秒)和合理的準確性,繼續使用緩存的位置,這將是禁食的結果。否則,你必須等待足夠好的準確度(你必須決定什麼是足夠的,看看.horizontalAccuracy)。

如果你堅持在viewDidLoad被調用之前擁有位置(viewWillAppear會是一個更好的地方),那麼你不得不推遲那個viewController直到你有足夠的位置。你如何做到這一點取決於如何加載視圖控制器。

0

這是我會做的。加載你的視圖,並在你的viewDidAppear中,調用你的方法來更新位置。我一直在github上使用一個很好的開源項目,名爲MBProgressHUD。它會顯示各種屏幕上的進度指標(這也將阻止離開你的觀點的用戶),而完成其工作。它還提供了一個視覺反饋到你的應用程序並沒有停滯不前,並且正在用戶。

您仍然需要理清準確性問題,但進度視圖讓您有時間加載視圖,並在您拉入需要時保持用戶參與。並保持你的用戶界面流暢。