2013-04-22 15 views
5

Udało mi się zarejestrować region lub monitorowanie, wiem o tym, ponieważ metoda didStartMonitoringForRegion została uruchomiona.iOS: CLLocationManager's didEnterRegion nie nazywane

mam prostą aplikację testową z jednym MKMapView gdzie mogę zobaczyć moją aktualną lokalizację, ja też mam mój region narysowane na mapie jako czerwone kółko, więc może rzeczywiście „fizycznie” zobaczyć, w jakim punkcie jestem wejściu lub wyjściu ten region. W metodach didEnterRegion i didExitRegion mam uruchamiany UIAlertView, który uruchamia się.

Jakiś czas temu zdecydowałem się opuścić biuro i pójść na spacer z moim iPhone 4, aby sprawdzić, czy to zadziała. Zacząłem w środku regionu (około 200 metrów), moja aplikacja była na pierwszym planie przez cały czas. Przeszedłem kilka przecznic i opuściłem region, nic się nie stało.

Czytam na SO (myślę), że czasami działa to tylko po wyjściu z regionu o określoną odległość, więc szłam dalej.

Po kolejnych 200m dałem sobie spokój, ponieważ UIAlertView wciąż się nie wyświetlało i zacząłem chodzić z powrotem. Oczywiście, po ponownym wejściu do regionu, didEnterRegion również nie strzelał.

Nie dzwonię pod numer [locationManager startUpdatingLocation] w dowolnym miejscu, powinienem być ?? Naprawdę tylko tworzę region i dzwonię pod numer [locationManager startMonitoringForRegion].

CLLocationManagerDelegate jest moim uczestnikiem aplikacji i wygląda na to, że mój telefon didStartMonitoringForRegion jest prawidłowo uruchamiany.

Czy brakuje mi czegoś jeszcze?

+0

Nie trzeba wywoływać opcji 'startUpdatingLocation'. Nie widzę problemu z tego, co mówisz. Może to pomaga, kiedy publikujesz jakiś kod. – Felix

+0

Czy zweryfikowałeś, że wewnątrz regionu '[monitorRegion zawieraCoordinate: mapView.userLocation.location.coordinate]' jest prawdziwy, a poza tym jest fałszywy? – Felix

+0

@ phix23 Właściwie to nie próbowałem, będę teraz, dzięki! – PaulG

Odpowiedz

2

Dokumentacja stwierdza, że ​​monitorowanie regionu działa niezależnie od innych usług lokalizacyjnych. Oznacza to, że powinno wystarczyć wywołanie funkcji startMonitoringForRegion.

Upewnij:

  • [CLLocationManager regionMonitoringAvailable] zwraca TAK
  • CLLocationManager.monitoredRegions zawiera prawidłowe regiony

UWAGA: Doc określa, że ​​wydarzenia sprawiają trwać od 3-5 minuty do strzału.

w IOS 6, regiony o promieniu od 1 do 400 m lepiej na iPhone 4S lub późniejszych urządzeń. (W iOS 5 regiony o promieniu między 1 a 150 metrem działają lepiej na urządzeniach iPhone 4S i nowszych). Na tych urządzeniach aplikacja może otrzymać odpowiedni region wprowadzony lub powiadomienie o opuszczeniu regionu w ciągu 3 do 5 minut na średnio, jeśli nie wcześniej.

I

Aplikacje mogą spodziewać powiadomienie, gdy tylko urządzenie porusza się 500 metrów lub więcej od poprzedniego powiadomienia. Nie należy spodziewać się powiadomień częściej niż raz na pięć minut.Jeśli urządzenie jest w stanie pobrać dane z sieci, menedżer lokalizacji jest o wiele bardziej prawdopodobny, aby dostarczać powiadomienia w odpowiednim czasie.

Mam nadzieję, że to pomoże.

+0

regionMonitoringEnabled jest przestarzały, ale próbowałem go i tak działa. Dzięki za odpowiedź! Hmmm, zgodnie z twoją odpowiedzią, zbyt szybko się poddałem i powinienem iść dalej. – PaulG

+1

Zmieniono go na region Monitorowanie Dostępne, które jest nowym połączeniem. Btw, sprawdź: http://stackoverflow.com/questions/214416/set-the-location-in-iphone-simulator na łatwiejszy sposób na przetestowanie tego niż chodzenie na wieki. – Nailer

0

Jedno zanotować (Jeśli symulowanie lokalizację):

Jeśli wsiadanie i wysiadanie nie nazywa, nawet jeśli uważasz, że zrobili wszystko, co w samym kodzie upewnij się, aby sprawdzić, czy wyłączone symulację lokalizacji :

Przejście do schematu projektu -> schemat edycji -> Wyłącz symulację lokalizacji.

Próbowałem przetestować monitorowanie mojego regionu, fizycznie chodząc w regionie i symulując lokalizację, i to nie działało dla mnie właśnie z tego powodu.

Powiązane problemy