NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats不调用该方法
计时器从不调用该方法。 我究竟做错了什么 ? 这是代码:
NSTimer *manualOverlayTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
方法:
-(void)hideManual
谢谢
这是一个线程问题。 我已经修复了:
dispatch_async(dispatch_get_main_queue(), ^{ // Timer here });
你不需要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是在块被执行之前经过的秒数
只要使用这个
[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!"); }
尝试这个 :
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];
在你的代码片段中,它不会显示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
更容易。