Básicamente, tengo este temporizador que debe repetirse cuando recibe un evento clave, e invalida cuando el usuario suelta la clave. Sin embargo, no puedo "validar" el temporizador incluso llamando al addTimer:forMode:
en NSRunLoop. ¿Alguien sabe por qué está sucediendo esto y cómo puedo solucionarlo? Gracias.¿Cómo "validar" un NSTimer después de invalidarlo?
Respuesta
No puede usar el temporizador invalidado.
de Apple Docs:
Una vez programada en un bucle de ejecución, se activa el temporizador en el intervalo especificado hasta que se invalida. Un temporizador no repetitivo invalida el inmediatamente después de que se dispara. Sin embargo, para un temporizador repetitivo, usted debe invalidar el objeto del temporizador usted mismo llamando a su método invalidar . Llamar a este método solicita la eliminación del temporizador del ciclo de ejecución actual ; como resultado, siempre debe llamar al método invalidado desde el mismo subproceso en el que se instaló el temporizador. Invalidar el temporizador lo deshabilita inmediatamente para que ya no afecte al ciclo de ejecución. El ciclo de ejecución luego elimina y libera el temporizador , justo antes de que el método de invalidación retorne o en algún momento posterior al . Una vez invalidado, los objetos del temporizador no pueden ser reutilizados.
Una vez que haya invalidado un NSTimer, no debe volver a utilizarlo.
En su lugar, cree una nueva instancia de temporizador y use esa instancia para agregar al método addTimer de NSRunLoop. Personalmente prefiero simplemente llamar al ScheduimerTithTimeInterval de NSTimer porque hace todo de una vez.
De NSTimer docs:
llamada a este método solicita la retirada del contador de tiempo de la corriente de bucle plazo; como resultado, siempre debe llamar al método de invalidación desde el mismo subproceso en el que se instaló el temporizador. Invalidando , el temporizador lo desactiva inmediatamente para que no afecte más al ciclo de ejecución . El ciclo de ejecución luego elimina y libera el temporizador, ya sea solo antes de que el método de invalidación regrese o en algún momento posterior. Una vez que se invalida, los objetos del temporizador no pueden reutilizarse.
Derecho, no sabía que ... ¡Gracias! – TheAmateurProgrammer
- 1. iPhone - NSTimer no repetir después de un incendio
- 2. ¿Cómo validar un JTextField?
- 3. Cómo detener NSTimer
- 4. ¿Cómo desencadenar NSTimer de inmediato?
- 5. Llamar a un método NSTimer
- 6. ¿Cómo validar un pasaporte?
- 7. NSTimer no se detiene
- 8. ¿Cómo detener el evento NStimer?
- 9. NSTimer nunca comienza
- 10. Usando un NSTimer para HH: MM: SS?
- 11. Uso de datos POST después de validar usando CodeIgniter
- 12. IOS: detener una NSTimer
- 13. Cómo saltear Validar después de hacer clic en el botón Cancelar de un formulario
- 14. Colocación de un NSTimer en un hilo separado
- 15. NSTimer Xcode Advertencia
- 16. NSTimer y NSRunLoop
- 17. NSTimer Reliable Alternativas
- 18. Cómo validar un valor de firma SAML
- 19. NSTimer timerWithTimeInterval: no funciona
- 20. ¿Cómo puedo validar un archivo de video desde un script?
- 21. NSTimer no dispara
- 22. cómo pausar y reanudar NSTimer en iphone
- 23. cómo deshabilitar NSTimer en objetivo-c
- 24. CVDisplayLink en lugar de NSTimer
- 25. Validar un campo oculto
- 26. Validar subconjunto de un formulario utilizando jQuery Validar complemento
- 27. ¿Validar un esquema XSD?
- 28. iphone NStimer start en 2 segundos
- 29. NSTimer ¿es seguro para subprocesos?
- 30. NSTimer no activa el selector
Curiosamente, hay NSRunLoop addTimer pero no hay RemoveTimer que podría haber sido útil para detener el temporizador de disparar sin invalidarlo. Debe ser que la creación del temporizador es más barata que la creación de puertos para que Apple no se moleste en agregar esa API. –