NSTimer无法调用方法

时间:2011-09-20 07:08:20

标签: iphone uiviewcontroller nstimer

以下是我的示例代码。

@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方法不在第二个UIViewController中调用timerFired方法。它在第一和第三视图控制器上完美运行。

appln Flow:1stView - > 2ndView - > 3rdView

3 个答案:

答案 0 :(得分:0)

不知道你是怎么做到的,但是NStimer有一个叫做的类方法 +(NSTimer *)scheduledTimerWithTimeInterval:(NSTimeInterval)秒target:(id)目标选择器:(SEL)aSelector userInfo:(id)userInfo重复:(BOOL)重复。所以你可以这样做:

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

这将为您调用timerFired方法。

P.S.Here是一个简单应用程序的链接,可以满足您的需求。

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

答案 1 :(得分:0)

你做的一切都差不多......差不多。 由于“if”语句,您的计时器不会触发。

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

这里,“if”语句返回NO,因为计时器尚未初始化。 你把它作为一个属性并合成它的事实并不意味着(timer!= nil)

如果删除“if”语句,它应该有效......

答案 2 :(得分:0)

来自NSTimer上的Apple docs

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:)