Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

NSTimer with a menu bar app

I'm working on a simple timer app, and I've created a NSStatusItem with a menu and I have some NSTextField labels that updates the timer labels (http://cld.ly/e81dqm) but when I click on the status item the NSTimer stops (and stops updating the labels)..... how can I get around this problem?

EDIT: here's the code that starts the timer:

timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(timerDidUpdate:) userInfo:nil repeats:YES];

like image 554
nanochrome Avatar asked Feb 13 '10 23:02

nanochrome


2 Answers

You should add timer into MainRunLoop as given below:

NSRunLoop * rl = [NSRunLoop mainRunLoop];
[rl addTimer:timer forMode:NSRunLoopCommonModes];
like image 99
Qaisar Majeed Avatar answered Sep 21 '22 07:09

Qaisar Majeed


I'm guessing the timer resumes as soon as you stop interacting with the NSStatusItem? (After the menu's dismissed & mouse button released).

The user interaction puts the main run loop into a mode where it doesn't update timers, so if your label has to continually update, you'll probably need to move the NSTimer and the label drawing to a separate process or another thread.

like image 28
Josh Freeman Avatar answered Sep 22 '22 07:09

Josh Freeman