定时器从不调用方法。 我究竟做错了什么 ? 这是代码:
NSTimer *manualOverlayTimer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(hideManual) userInfo:nil repeats:NO];
方法:
-(void)hideManual
谢谢
定时器从不调用方法。 我究竟做错了什么 ? 这是代码:
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
,你应该火初始化后,定时器,就像这样:
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
。