2012-07-26 18 views
6

Moja aplikacja śledzi użytkownika pod numerem CLLocationManager. W delegacie zadzwoń: didUpdateToLocation Robię wszystkie fajne rzeczy, zapisując ich pozycję. Potrzebowałem jednak sposobu na sprawdzenie, czy przestali. W ten sposób mogłem przestać nagrywać lokacje i rozważyć ich podróż. Mam więc NSTimer w CCLocationManager, który jest dodawany i usuwany za każdym razem, gdy wywoływana jest nazwa didUpdateToLocation. Od tego będzie on zainicjowany, gdy użytkownik zatrzyma się i CLLocationManager przestanie być wywoływany.NSTimer i NSRunLoop

Jedynym sposobem, że mógłbym dostać NSTimer do pracy jest do zrobienia:

[[NSRunLoop mainRunLoop] addTimer:userStoppedMovingTimer forMode:NSRunLoopCommonModes]; 

Następnie, aby go usunąć:

[userStoppedMovingTimer invalidate]; 

nigdy nie miałem, aby dodać liczniki jak to w przeszłość. Czy ktoś mógłby rzucić trochę światła na to, dlaczego tak jest?

+0

Jeśli utworzysz timer z '+ scheduleTimerWithTimeInterval: target: selector: userInfo: repeatates:', to nie powinno być problemu. –

Odpowiedz

8

Z documentation:

Istnieją trzy sposoby tworzenia Timer:

  1. Użyj scheduledTimerWithTimeInterval:invocation:repeats: lub scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: klasa sposób, aby utworzyć timera i zaplanować go na aktualnym biegu pętla w w trybie domyślnym.

  2. Użyj timerWithTimeInterval:invocation:repeats: lub timerWithTimeInterval:target:selector:userInfo:repeats: klasy metody do utworzenia obiektu timera bez planowania go na pętli biegu. (Po jej tworzeniu, należy dodać licznik do pętli uruchamiany ręcznie przez wywołanie sposób odpowiedniego obiektu NSRunLoop addTimer:forMode:).

  3. Przydzielanie stoper i zainicjować za pomocą metody initWithFireDate:interval:target:selector:userInfo:repeats:. (po jego utworzeniu, należy dodać licznik do pętli uruchamiany ręcznie przez wywołanie metody odpowiedniego NSRunLoop obiektu addTimer:forMode:.)

Prawdopodobnie zostały używając opcji 1 powyżej, a teraz Używa się opcji 2 lub 3.