我正在使用:
创建并触发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 :(得分:38)
-fire:
方法手动触发一次。要启动和重复计时器,您必须使用[[NSRunLoop currentRunLoop] addTimer: forMode:]
答案 1 :(得分:22)
搞定了
向mainRunLoop
添加计时器使其正常工作
你走了:
目标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)
答案 2 :(得分:7)
您不能只将分配给已作为属性放入标题的计时器。这应该有效:
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
另外:fire方法触发定时器,不在循环中。如果计时器不重复,则无效。在说出火线后,添加:
BOOL timerState = [ncTimer isValid];
NSLog(@"Timer Validity is: %@", timerState?@"YES":@"NO");
答案 3 :(得分:6)
您也可以在此块中复制代码,该代码在主线程中插入Timer的创建。
因此代码将保留:
dispatch_async(dispatch_get_main_queue(), ^{
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self selector:@selector(handleTimer:) userInfo:nil repeats: YES];
});
答案 4 :(得分:3)
分配给ncTimer
不会启动属性retain
功能。
假设声明在成员对象中,您需要这样做:
self.ncTimer = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(handleTimer:) userInfo:nil repeats:YES]
答案 5 :(得分:1)
您可以在 Swift 中编写相同的内容,而无需在主循环中运行,方法是:
ncTimer = Timer.scheduledTimer(timeInterval: 1.0,
target: self,
selector: #selector(self.handleTimer),
userInfo: nil,
repeats: true)
ncTimer.fire()
答案 6 :(得分:0)
我不知道为什么,但是Timer.scheduledTimer方法不起作用,但是Timer.init方法起作用。
self.timer = Timer.init(timeInterval: 10.0, repeats: true, block: { (timer) in
print("\n--------------------TIMER FIRED--------------\n")
self.checkForDownload()
})
RunLoop.main.add(self.timer!, forMode: RunLoopMode.defaultRunLoopMode)
答案 7 :(得分:0)
带关闭功能的快速计时器
let timer = Timer.scheduledTimer(withTimeInterval: 1, repeats: true) { _ in
// Do whatever
}
timer.fire()