的NSTimer scheduledTimerWithTimeInterval:目标:选择器:USE

2019-07-30 11:10发布

定时器从不调用方法。 我究竟做错了什么 ? 这是代码:

NSTimer *manualOverlayTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];

方法:

-(void)hideManual

谢谢

Answer 1:

这是一个线程的问题。 我已经固定的:

dispatch_async(dispatch_get_main_queue(), ^{
    // Timer here
});


Answer 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是块将得到执行之前,将经过的秒的量



Answer 3:

只要使用此

[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!");
}


Answer 4:

试试这个 :

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];


Answer 5:

在你的代码片段它并不显示的时间和地点NSTimer被激发。

如果你想使用NSTimer ,你应该火初始化后,定时器,就像这样:

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



文章来源: NSTimer scheduledTimerWithTimeInterval:target:selector:userInfo:repeats doesn't invoke the method