2013-07-25 11 views
6

Może być mylące, jak monitorowanie regionu działa, ale to jest to, co do tej pory miałem:W jaki sposób system iOS wie, który menedżer lokalizacji może delegować do monitorowania regionu, gdy aplikacja nie jest uruchomiona?

Rejestracja regionu do monitorowania za pośrednictwem mojego menedżera lokalizacji, który jest zaimplementowany w klasie singleton, ten singleton jest również ustawiony jako delegat menedżera lokalizacji, dlatego wywoływana jest wdrożona metoda.

Działa to całkowicie zgodnie z oczekiwaniami, jeśli aplikacja jest aktywna lub zawieszona, metoda jest wywoływana. Ma to również sens, ponieważ klasa została już załadowana, a gdy region wejdzie w zdarzenie, iOS wysyła to nawet do mojej aplikacji, która dzwoni do menedżera lokalizacji, który zarejestrował (prawdopodobnie ma do niego odniesienie), a następnie wywołuje to, co delegat również zarejestrowany wzdłuż niej (ponieważ klasa jest tam gotowa i załadowana).

Problem polega na tym, co dzieje się, gdy aplikacja została zabita? Czy po raz pierwszy został wypuszczony na dalszy plan? W jaki sposób system iOS wie, do której metody delegowania należy użyć, a jeśli został już załadowany?

Odpowiedz

7

Gdy aplikacja została zabita i rozkręci do aktualizacji lokalizacji nie może być Location Manager delegata jeszcze i jako takie nie istnieją dostarczone do tego delegata powiadomienia. System nie może wiedzieć, które z twoich zajęć powinny być używane jako delegat menedżera lokalizacji lub jak utworzyć instancję.

Zamiast tego Twój application:didFinishLaunchingWithOptions: zostaje wywołany jak zwykle, ale UIApplicationLaunchOptionsLocationKey jest ustawiony w słowniku opcji. To mówi Twojej aplikacji, że musisz utworzyć instancję menedżera lokalizacji i ustawić delegata. Dopiero po wykonaniu tej czynności delegat zostanie wywołany z aktualizacjami regionu.

+0

A więc są dwa różne przepływy? 1 z moją aplikacją żywą, a drugą bez niej. Nawiasem mówiąc, po otrzymaniu słownika z tym kluczem podczas uruchamiania aplikacji powinienem obsługiwać to konkretne powiadomienie? lub czy menedżer lokalizacji jest monitorowany, gdy skonfiguruję go tak, aby był natychmiast dostarczany? (Mam na myśli powiadomienie, które spowodowało uruchomienie mojej aplikacji) – Pochi

+0

To prawda. W większości przypadków możesz przekazać wartość lokalizacji podaną jako opcja uruchamiania do wszystkiego, co zajmuje się zmianami lokalizacji w aplikacji, i potencjalnie również rozpocząć monitorowanie zmian lokalizacji w aplikacji. Rozpocząłeś od nowej lokalizacji - zrób coś z tą wartością lokalizacji i zacznij monitorować zmiany lokalizacji. – quellish

Powiązane problemy