2012-07-26 16 views
6

Mi aplicación realiza un seguimiento de un usuario con CLLocationManager. En la llamada de delegado didUpdateToLocation hago todo lo divertido de guardar su posición. Sin embargo, necesitaba una forma de comprobar si se habían detenido. Así podría dejar de grabar lugares y considerar su viaje terminado. Así que tengo un NSTimer en CCLocationManager que se agrega y elimina cada vez que se llama didUpdateToLocation. Eso se iniciará cuando el usuario se detenga y deje de llamar al CLLocationManager.NSTimer y NSRunLoop

La única manera de que alguna vez pudiera conseguir la NSTimer al trabajo es hacer:

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

continuación para eliminarlo:

[userStoppedMovingTimer invalidate]; 

nunca he tenido que añadir temporizadores como este en el pasado. ¿Podría alguien arrojar algo de luz sobre por qué es esto?

+0

Si crea el temporizador con '+ scheduledTimerWithTimeInterval: target: selector: userInfo: repeats:', esto no debería ser un problema. –

Respuesta

8

Desde el documentation:

Hay tres maneras de crear un temporizador:

  1. Uso del scheduledTimerWithTimeInterval:invocation:repeats: o scheduledTimerWithTimeInterval:target:selector:userInfo:repeats: clase método para crear el temporizador y programarlo en la ejecución actual bucle en el modo predeterminado.

  2. utilizar el método de la clase timerWithTimeInterval:invocation:repeats: o timerWithTimeInterval:target:selector:userInfo:repeats: para crear el objeto de temporizador sin programar en un bucle de ejecución. (Después de crearlo, debe agregar el temporizador a un bucle de ejecución manualmente llamando el método del objeto NSRunLoop correspondiente addTimer:forMode:.)

  3. asignar el temporizador e inicializar utilizando el método initWithFireDate:interval:target:selector:userInfo:repeats:. (después de crearlo, debe agregar el temporizador a un bucle de ejecución manualmente por llamando al método de la NSRunLoop objeto correspondiente addTimer:forMode:.)

Probablemente se estaba utilizando la opción 1 con anterioridad, y ahora está usando la opción 2 o 3.