Nstimer avec une application de barre de menu
-
20-09-2019 - |
Question
Je travaille sur une application Timer simple, et j'ai créé un NSStatusItem avec un menu et j'ai des étiquettes NSTextField qui mettent à jour les étiquettes de la minuterie (http://cld.ly/e81dqm) Mais lorsque je clique sur l'élément d'état, le nstimer s'arrête (et cesse de mettre à jour les étiquettes) ..... comment puis-je contourner ce problème?
ÉDITER: Voici le code qui démarre la minuterie:
timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerDidUpdate:) userInfo:nil repeats:YES];
La solution
Je suppose que la minuterie reprend dès que vous arrêtez d'interagir avec le nsstatusitem? (Après le bouton rejeté et de souris du menu).
L'interaction utilisateur met la boucle d'exécution principale dans un mode où il ne met pas à jour les minuteries, donc si votre étiquette doit continuellement mettre à jour, vous devrez probablement déplacer le nstimer et le dessin d'étiquette sur un processus distinct ou un autre thread.
Autres conseils
Vous devez ajouter une minuterie dans MAINRUNLOOP comme indiqué ci-dessous:
NSRunLoop * rl = [NSRunLoop mainRunLoop];
[rl addTimer:timer forMode:NSRunLoopCommonModes];