9

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

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

方法:

-(void)hideManual

谢谢

4

5 回答 5

28

这是一个线程问题。我已经解决了:

dispatch_async(dispatch_get_main_queue(), ^{
    // Timer here
});
于 2012-07-17T07:24:13.203 回答
3

对于此类任务,您不需要 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 是在执行块之前将经过的秒数

于 2012-07-16T09:16:55.210 回答
1

就用这个

[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];

编辑

当按下btn(an ) 并调用函数时,此代码运行良好。UIButton-(void)btnPressed

-(void)btnPressed{
    [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
}

-(void)hideManual{
    NSLog(@"Hi, I'm here!");
}
于 2012-07-16T09:14:16.430 回答
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];
于 2012-07-16T09:19:43.577 回答
0

在您的代码片段中,它不会显示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.

于 2012-07-16T13:00:01.467 回答