我已经使用 NSTimer 类别来创建带有 https://github.com/jivadevoe/NSTimer-Blocks block 的计时器.在该计时器被触发之前,我试图在我的一种方法中使计时器无效,但它不起作用。我的代码如下:
-(void)addQuestionView
{
if([resizeTimer isValid])
[resizeTimer invalidate];
.
.
.
.
.
[webView loadHTMLString:questionHtmlStr
baseURL:nil];
}
- (void)webViewDidFinishLoadUIWebView *)webView
{
resizeTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 block:^{
//calculating height based on content
//changing webView's contsraints
} repeats:NO];
.
//long process
//animation
.
}
如上代码,如果第一次调用 addQuestionView 方法,定时器将设置为在 4 秒后运行。如果 addQuestionView 立即调用,比如 1 秒后,我希望 resizeTimer 无效,以避免在计算高度和更改 webView 约束时出现任何不当行为。我通过 NSLogging 一些值检查了这一点,它没有失效,并且被调用了两次。谁有解决方案,请帮助我。
谢谢!
您应该确保在实例化新计时器之前使之前的计时器(如果有)无效,例如:
- (void)webViewDidFinishLoadUIWebView *)webView {
if ([resizeTimer isValid])
[resizeTimer invalidate];
resizeTimer = [NSTimer scheduledTimerWithTimeInterval:4.0 block:^{
...
} repeats:NO];
....
}
关于ios - 使用尚未触发的 block 使 NSTimer 无效 : Objective-C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40605804/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (https://ogeek.cn/) | Powered by Discuz! X3.4 |