我希望这是一个简单的修复,你告诉我。
我所拥有的是NSTimer类型的IVAR *类计时器。执行IBAction时,会调用包含以下代码的方法:
if (timer) timer = nil;
timer = [NSTimer timerWithTimeInterval:0.2 target:self selector:@selector(removeOverlay) userInfo:nil repeats:NO];
在同一个班级,我有一个方法:
- (void)removeOverlay {
...
}
在.2秒的时间间隔后不会被触发。
你可能知道这里有什么问题吗?
答案 0 :(得分:2)
timer
NSTimer
的实例。removeOverlay
看起来更新了一些用户界面。你可以在主线上调用它。removeLayout
方法中放置断点以查看它是否会触发。timerWithTimeInterval
替换为scheduledTimerWithTimeInterval
在主线程上执行代码(允许UI更新):
- (void)removeOverlay {
dispatch_async(dispatch_get_main_queue(), ^{
// update ui
});
}
答案 1 :(得分:1)
你需要
[[NSRunLoop mainRunLoop] addTimer:timer forMode:NSDefaultRunLoopMode];
定时器通过将调用放在运行循环中的适当位置来工作。
答案 2 :(得分:1)
由于没有人提到它,将计时器添加到运行循环的替代方法是使用fire方法:
[timer fire];
答案 3 :(得分:0)
如果仅在我使用[self performSelector:@selector(removeOverlay) afterDelay:(seconds you want to delay the use the method removeOverlay)];