2011-01-23 42 views
10

我创造之后重复和发射NSTimer有:iPhone - 的NSTimer不火

ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
              target:self 
             selector:@selector(handleTimer:) 
             userInfo:nil 
              repeats:YES]; 
[ncTimer fire]; 

- (void)handleTimer:(NSTimer *)chkTimer { 
    // do stuff 
} 

我保留我的定时器:

@property (nonatomic, retain) NSTimer *ncTimer; 

对于一些定时器不重复的原因。它只发射一次而不再发射一次。

+0

*我的一个愚蠢的问题,但它是最好的,以确保:*我相信你不是handleTimer方法中的任何位置无效计时器? – 2011-01-23 11:36:46

+0

不,我不是..我唯一需要补充的是,我在viewDidLoad方法 – Zigglzworth 2011-01-23 11:46:17

回答

7

你不能只是分配给您已经把在你的头一个属性的计时器。这应该工作:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];

此外:火方法触发计时器,不循环。如果定时器不重复,则无效。在说出火线后,加上:


BOOL timerState = [ncTimer isValid]; 
NSLog(@"Timer Validity is: %@", [email protected]"YES":@"NO"); 
+1

“计时器有效期是:是”但仍然没有运气......计时器不重复。这里可能是什么问题? – Zigglzworth 2011-01-23 12:14:45

+0

我只是做了一个小测试应用程序,看看发生了什么,它对我自己的工作很好。你的实现的顶部是否有@synthesize ncTimer? – 2011-01-23 12:27:36

3

分配给ncTimer你有不会启动性能retain功能。

假设声明的成员对象,你需要做内:

self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES] 
+0

中添加了自己的定时器。但问题仍然存在 – Zigglzworth 2011-01-23 12:10:41

34

-fire:方法手动触发一次。对于要启动一个定时器和重复,你必须把它添加到使用[[NSRunLoop currentRunLoop] addTimer: forMode:]

19

得到它

添加定时器mainRunLoop一个runloop使其工作

在这里你去:

目标C :

self.ncTimer = [NSTimer timerWithTimeInterval:2.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]; 
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode]; 

夫特:

var ncTimer = NSTimer(timeInterval: 2.0, target: self, selector: Selector("handleTimer"), userInfo: nil, repeats: true) 
NSRunLoop.mainRunLoop().addTimer(ncTimer, forMode: NSDefaultRunLoopMode) 
6

也可将此块,其插入在主线程定时器的创建内部复制你的代码。

代码将因此保持:

dispatch_async(dispatch_get_main_queue(), ^{ 
    self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 
       target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES]; 
});