计时器永远不会调用该方法。我究竟做错了什么 ?这是代码:
NSTimer *manualOverlayTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
方法:
-(void)hideManual
感谢
答案 0 :(得分:26)
这是一个线程问题。我已修复:
dispatch_async(dispatch_get_main_queue(), ^{
// Timer here
});
答案 1 :(得分:2)
对于此类任务,您不需要NSTimer。要在主线程上的特定时间段后隐藏视图对象,可以使用gcd方法dispatch_after
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, NSEC_PER_SEC * 2.0), dispatch_get_main_queue(), ^(void){
// Your code
});
其中2.0是块执行前将经过的秒数
答案 2 :(得分:1)
请使用此
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
修改强>
当btn
(UIButton
)被按下且-(void)btnPressed
函数被调用时,此代码效果很好。
-(void)btnPressed{
[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
}
-(void)hideManual{
NSLog(@"Hi, I'm here!");
}
答案 3 :(得分:0)
试试这个:
NSTimer *manualOverlayTimer = [NSTimer scheduledTimerWithTimeInterval:1.0
target:self
selector:@selector(hideManual)
userInfo:nil
repeats:YES];
repeat:YES instead of [[NSRunLoop currentRunLoop] addTimer:manualOverlayTimer forMode:NSDefaultRunLoopMode];
答案 4 :(得分:0)
在您的代码片段中,它不会显示NSTimer
被触发的时间和地点。
如果你想使用NSTimer
,你应该在init之后触发计时器,如下所示:
NSTimer *_timer = [NSTimer scheduledTimerWithTimeInterval:2.f target:self selector:@selector(hideManual) userInfo:nil repeats:false];
[_timer fire];
但您也可以在任何方法中使用以下行:
[self performSelector:@selector(hideManual) withObject:nil afterDelay:2.f];
在这种情况下看起来比使用NSTimer
更容易。