NSTimer не может вызвать metaord - PullRequest
       22

NSTimer не может вызвать metaord

0 голосов
/ 20 сентября 2011

Ниже приведен мой пример кода.

@interface TrackTimer : NSObject {

    NSTimer *timer;
}

@property (nonatomic, retain) NSTimer *timer;

- (void) startTimer;
- (void) stopTimer;
- (void) timerFired;

@end


TrackTimer.m

@synthesize timer;

- (void) startTimer
{

NSLog(@"Timer started ...");

if(timer)
{
    timer = nil;    
}
timer = [NSTimer scheduledTimerWithTimeInterval:30.0 target:self selector:@selector(timerFired) userInfo:nil repeats:NO];

}

- (void) stopTimer
{

NSLog(@"Timer stoped ...");
[tTimer invalidate];

}


- (void) timerFired
{

   NSLog(@"Timer Fired ... :)");    
}

Мне нужно использовать один и тот же объект таймера из 3 разных контроллеров представления, моя проблема в том, что метод startTimer не вызывает метод timerFired во втором UIViewController.Он отлично работает на первом и третьем контроллере вида.

appln Поток: 1stView -> 2ndView -> 3rdView

Ответы [ 3 ]

0 голосов
/ 20 сентября 2011

Вы все делаете правильно ... почти. Ваш таймер не срабатывает из-за оператора if.

if (timer) {
    timer = [NSTimer scheduledTimerWithTimeInterval:5 target:self selector:@selector(boom) userInfo:nil repeats:NO];
}

Здесь оператор if возвращает NO, потому что таймер еще не инициализирован. Тот факт, что вы делаете его свойством и синтезируете его, не означает, что (timer! = Nil)

Если вы удалите оператор if, он должен работать ...

0 голосов
/ 21 сентября 2011

Из Apple docs на NSTimer:

The message to send to target when the timer fires. The selector must have the following signature:
- (void)timerFireMethod:(NSTimer*)theTimer

Итак, похоже, что сигнатуру вашего метода timerFired необходимо расширить, чтобы включить один параметр '(NSTimer *) theTimerи ваш селектор должен быть @selector (timerFired:)

0 голосов
/ 20 сентября 2011

Не совсем знаю, как вы это делаете, но NStimer имеет метод класса с именем + (NSTimer *) scheduleTimerWithTimeInterval: (NSTimeInterval) секунд target: (id) селектор цели: (SEL) aSelector userInfo: (id) userInfo повторяется: (BOOL) повторяется.Таким образом, вы можете сделать это следующим образом:

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

Это вызовет метод timerFired для вас.

PS Вот ссылка на простое приложение, которое делает именно то, что вы хотите.

http://www.mediafire.com/?8uz115drqzb2nan

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...