以下是我的示例代码。
@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
答案 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是一个简单应用程序的链接,可以满足您的需求。
答案 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:)