Utilisation de Swift 3 Arrêt d'un timer programmé, le Timer continue le tir même si le timer est nul
Nous appelons startTimer fonction pour démarrer une minuterie. Quand nous avons voulu l'arrêter, nous appelons stopTimerTest fonction, mais après nous avons appelé stopTimer fonction de la timerTestAction continue. De vérifier la minuterie condition, nous avons utilisé d'impression et d'imprimer en timerActionTest retourne nil.
var timerTest: Timer? = nil
func startTimer () {
timerTest = Timer.scheduledTimer(
timeInterval: TimeInterval(0.3),
target : self,
selector : #selector(ViewController.timerActionTest),
userInfo : nil,
repeats : true)
}
func timerActionTest() {
print(" timer condition \(timerTest)")
}
func stopTimerTest() {
timerTest.invalidate()
timerTest = nil
}
source d'informationauteur Hope
Vous devez vous connecter pour publier un commentaire.
Essayer d'apporter les changements suivants à votre code:
Changer la façon dont vous déclarez
timerTest
puis dans startTimer avant l'instanciation de vérifier il
timerTest
est nulEnfin dans votre
stopTimerTest
vous invalidertimerTest
si elle n'est pas nullePlus probable que vous avez appelé
startTimer
deux fois sans appelstopTimerTest
. Si vous faites cela, vous allez perdre votre pointeur à l'origine de la minuterie et de ne jamais être en mesure de l'invalider.L'approche classique consiste à gérer l'invalidation comme une partie de la définition:
L'arrêt est tout simplement la mise à zéro:
Vérifier, êtes-vous vraiment appeler
stopTimerTest()
parce quetimerTest.invalidate()
est correct pour l'arrêt de la minuterie.