2013-07-25 22 views
6

我可能會混淆區域的監控是如何工作的,但是這是我到目前爲止有:iOS如何知道應用程序未運行時哪個位置管理器委託調用區域監視?

我註冊過我的位置管理器,這是在一個單獨的類來實現監控的區域,這個單也被設置爲位置管理器的委託,所以實現的方法正在被調用。

- (void)locationManager:(CLLocationManager *)manager didEnterRegion:(CLRegion *)region 

如果應用程序處於活動狀態或暫停方法正在被調用,這完全按預期工作。它也是非常重要的,因爲類已經被加載,當區域進入事件發生時,iOS甚至將它發送給我的應用程序,該應用程序調用註冊的位置管理器(可能引用了該位置),並反過來調用任何代理也沿着它註冊(因爲課程已準備就緒並已加載)。

問題是,應用程序被殺後會發生什麼?它是第一次發佈到後臺嗎? iOS如何知道要調用的委託方法,以及它是否已被加載?

回答

7

當您的應用程序被終止並開始進行位置更新時,目前還沒有位置管理器委託,因此沒有傳遞給該委託的通知。系統無法知道應將哪些類用作位置管理器委派或如何實例化它。

取而代之,您的application:didFinishLaunchingWithOptions:按照慣例調用,但在選項字典中設置了UIApplicationLaunchOptionsLocationKey。這會告訴你的應用你需要實例化一個位置管理器並將其設置爲委託。只有在完成此操作後,代表纔會被區域更新調用。

+0

所以有兩種不同的流程對嗎? 1與我的應用程序活着,另一個沒有它。順便說一下,在應用程序啓動時,如果接收到帶有該鍵的字典,是否應該處理該特定通知?或者當我將其設置爲立即交付時,位置管理員是否受到監控? (我在談論讓我的應用程序啓動的通知) – Pochi

+0

這是正確的。在大多數情況下,您會將作爲啓動選項給定的位置值傳遞給處理應用中位置更改的任何位置值,並且可能會開始監視應用中的位置更改。你從一個新的位置開始 - 使用該位置值做一些事情並開始監視位置變化。 – quellish

相關問題