NSTimer wird bei der Invalidierung nicht gestoppt

7

Ich habe den folgenden Code in meiner .h-Datei:

%Vor%

Ich habe den folgenden Code in meiner .m-Datei:

%Vor%

Aber mein Timer möchte nicht aufhören, wenn ich das Ungültige aufruft.

Der LoginButton wird nur zweimal gedrückt, einmal wenn das strResult auf "Guard" steht und dann ändert die Anwendung es auf "Owner" und der Benutzer drückt erneut die Login-Taste, also glaube ich nicht m Einstellen mehrerer Timer.

Nachdem ich die Login-Taste gedrückt und den Timer gestartet habe, gehe ich zu einer anderen Ansicht und gehe dann zurück, um den Login-Knopf noch einmal zu drücken, um den Timer anzuhalten. Muss ich etwas Besonderes tun, um den messageTimer zu erhalten, da ich die Ansichten für einen Moment gewechselt habe und dann zurückkam?

Irgendwelche Ideen?

Danke!

    
NCoder 10.05.2013, 05:21
quelle

6 Antworten

28

Sie müssen [self.messageTimer invalidate] für denselben Thread aufrufen, für den Sie den Timer erstellt haben. Stellen Sie nur sicher, dass der Timer im Hauptthread erstellt und ungültig gemacht wird.

%Vor%     
robbartoszewski 10.05.2013, 08:16
quelle
14

NSTimer wird von NSRunLoop beibehalten. Daher sehe ich das Problem nur, wenn Sie mehr als einen Timer erstellen und nur das ungültig machen, auf was Sie sich beziehen.

Beispiel:

%Vor%     
Dmitry Shevchenko 10.05.2013 05:31
quelle
3

Haben Sie versucht, wiederholen Sie als Nein

%Vor%     
wesley 10.05.2013 05:40
quelle
2

Wenn der Code am Ende (beginnend mit if) zweimal mit UserType! = Owner aufgerufen wird, erstellen Sie einen neuen Timer, ohne den alten zu entwerten. Jetzt laufen zwei Timer. Wenn der Code ein drittes Mal ausgeführt wird, fügen Sie einen dritten Timer hinzu und so weiter. Ausführen des Codes mit UserType == Nur Besitzer macht den letzten Timer ungültig und selbst wenn er wiederholt aufgerufen wird, werden ältere Timer nicht ungültig.

Sie haben ein Timer-Leck. ; -)

    
Amin Negm-Awad 10.05.2013 08:04
quelle
1

Wie wäre es mit einem NSLog in Ihrer checkForMessages Methode? Es wäre einfacher zu überprüfen, ob es wirklich nur 1 Timer gibt.

(Ich würde das lieber in einen Kommentar schreiben, aber ich habe nicht so viel Ansehen ....)

    
Ooops 10.05.2013 07:58
quelle
0

Ich habe einen Ansatz, um den Timer zu stoppen oder zu deaktivieren, bevor Sie dies anwenden, stellen Sie sicher, dass Sie alle Fälle wie oben erwähnt ausprobiert haben, damit Sie auch verstehen, warum dieser Ansatz letztendlich verwendet wurde.

%Vor%

Wenn also der Fall auftritt, dass der Timer nicht stoppt und dann in diesen Code eingeht, wird der Timer dauerhaft gestoppt.

    
Gourav Joshi 14.10.2016 05:02
quelle

Tags und Links