So, please don't take everything I typed and generalize it, because it's not for everyone.
I do understand where Dejo, Balamw and the others are coming from though. And frankly, they are probably better suited to help you than I am. I don't have a lot of experience with Objective-C and Cocoa, not like they do, having mostly come into it recently.
Back to the code, here is a photo of my connections (ignore canceBigtimer). What you say is true I don't know how NSTimer works entirely , just some parts, I realize that and it is one of the reason I postpone my timer for a future update (need to study it).
I have two timers, because, like I said.. I don't have full knowledge of timers. I know now that 1 timer is enough, even if I use two timers and start them at the same time, the log only shows 1 loop and the countdown in separate labels show e.g. 59 in one and 58 in another and so on.
Ok, how about we work on making 1 timer work then ? The code you posted is very complicated and I don't think it has to be this complicated. Going 1 timer would simplify this.
I see your Start Button is associated to 3 actions. Is this really what you want ? Let's simplify this. As an exercise, make 1 method, call it startTimer (like I did) and have only that action associated with your start button. From there, you can call the other methods yourself as needed.
Once you have modified the code in this way, post again what you have in full, what it is doing and what you think it should be doing. We'll go from there.
You mention my two global variables, It makes sense that the timer does not stop because the variables are outside the method that creates the timer. is that whats going on?
No, the variables are "fine" where they are. They would be better positionned in the @interface block and declared as instance variables, but implementation scope globals work too.
What you need to do however is reset those if you want your timer to start back at 0. Somewhere in your "stop/reset" code, there needs to be an initialization of those back to 0 :
Code:
seconds = 0;
minutes = 0;
If your Cancel button is what should reset it, then this should be right now in newActionTimer. But ideally, we'll get rid of that function when you simplify the code down to 1 timer.
Look at my NSLog outputs in my screenshot earlier. There's 3 methods there. updateLabel, cancelTimer, startTimer. This should have given you a big indication of how not complicated you should have made this.
If you want 3 buttons, start, reset, stop, you'd technically need 4 methods, as follows :
Code:
-(IBAction) startTimer: (id) sender;
-(IBAction) stopTimer: (id) sender;
-(IBAction) resetTimer: (id) sender;
-(void) updateLabel;
One to update the label as needed, one to start the timer, one to stop it and one to reset it.
Also, NSTimer is not your timer. The timer is what you are creating with ATimerViewController. You need to grasp this. NSTimer simply calls methods, in this case, it should be update label. That's about all it should be doing. Both the stop and reset methods should release the NSTimer object instance. startTimer should always create a new one. However, reset should be the one to set back seconds/minutes to 0.