2012-02-12 3 views
-1

У меня есть секундомер, который отлично работает на моем приложении, однако, когда я нажимаю кнопку «Назад», чтобы перейти в другой режим, он останавливается. Я хочу, чтобы секундомер продолжал работать, даже когда пользователь просматривает другую страницу.NSTimer Секундомер

Как это сделать?

Ok добавлен код

код:

.h

UILabel *stopWatchLabel; 

NSTimer *stopWatchTimer; // Store the timer that fires after a certain time 
NSDate *startDate; // Stores the date of the click on the start button 

@property (nonatomic, retain) IBOutlet UILabel *stopWatchLabel; 

- (IBAction)onStartPressed:(id)sender; 
- (IBAction)onStopPressed:(id)sender; 

.m

- (void)viewDidUnload 
{ 
[self setStopWatchLabel:nil]; 
[super viewDidUnload]; 
// Release any retained subviews of the main view. 
// e.g. self.myOutlet = nil; 
} 

- (void)updateTimer 
{ 
NSDate *currentDate = [NSDate date]; 
NSTimeInterval timeInterval = [currentDate timeIntervalSinceDate:startDate]; 
NSDate *timerDate = [NSDate dateWithTimeIntervalSince1970:timeInterval]; 

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
[dateFormatter setDateFormat:@"HH:mm:ss.SSS"]; 
[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0.0]]; 
NSString *timeString=[dateFormatter stringFromDate:timerDate]; 
stopWatchLabel.text = timeString; 
} 

- (IBAction)onStartPressed:(id)sender { 
startDate = [NSDate date]; 

// Create the stop watch timer that fires every 10 ms 
stopWatchTimer = [NSTimer scheduledTimerWithTimeInterval:1.0/10.0 
                target:self 
               selector:@selector(updateTimer) 
               userInfo:nil 
               repeats:YES]; 
} 

- (IBAction)onStopPressed:(id)sender { 
[stopWatchTimer invalidate]; 
stopWatchTimer = nil; 
[self updateTimer]; 
} 
+1

Какой объект принадлежит NSTimer? – bneely

ответ

1

Ну он останавливается, потому что вы отпуская мнение о том, что живет в когда вы выталкиваете его из стека. Вы пробовали сделать класс секундомера, который управляет таймером независимо от вида?

0

Секундомер останавливается, потому что вы отпускаете представление, которое его контролирует.

Вы должны убедиться, что NSTimer не связано ни с каким видом. Возможно, вы можете использовать subviews или Modal View Controllers (Я думаю, что может работать), чтобы секундомер не был выпущен при просмотре.

Вы также можете попробовать отправить информацию секундомера в следующий вид через переменные, а затем, чтобы другой вид захватил секундомер оттуда.

Есть, безусловно, и другие методы.

В любом случае, вам необходимо убедиться, что NSTimer не выпущен.

+0

спасибо за подсказку –

0

Точно, если вы посмотрите на свою «ViewDidUnload», вы устанавливаете ее на нуль, когда открывается представление, которое оно делает, когда вы переходите к другому виду.

Что-то, что вы можете попробовать - это иметь класс, в котором запущен таймер, и отправить его на просмотр таким образом, что он все еще работает, даже если представление, отображающее его, отсутствует в памяти.

MVC style!

0

Да, что говорят все остальные. На ViewDidUnload он освобождает его. Это означает, что в основном завершается операция, как только выйдет из ViewController.

+0

Хорошо, когда я иду удалять его из viewDidUnload Получаю много ошибок. Если у вас есть какой-то код относительно того, что я должен делать вместо этого. Я ценю это. спасибо –

0

Я не знаю, проблема уже решена или нет, но все же. Создайте объект NSTimer в классе делегатов приложения, а затем создайте экземпляр таймера в .m файле делегата приложения, таким образом, ваш NSTimer останется в памяти. и когда вы хотите остановить или приостановить таймер, вы можете просто аннулировать этот объект из любого контроллера вида.

Смежные вопросы