繁体   English   中英

目标C:计时器在再次打开时使应用程序崩溃

[英]Objective C: Timer crashes app when turned on a second time

我在头文件中声明了我的NSTimer。 轻按play按钮后,它将打开计时器。 下次点击禁用计时器。 第三次敲击该应用程序,没有错误消息。 为什么会这样呢?

-(IBAction) play {

if ([col1 isValid]) {
    [col1 invalidate];
} else {
    col1 = [NSTimer scheduledTimerWithTimeInterval:.8 target:self selector:@selector(playCol1) userInfo:nil repeats:YES];
}

invalidate将导致对象被释放。 因此,您试图在错误的引用上调用isValid 使col1对象无效后,将其取消,这应该没问题。

-(IBAction) play {

    if ([col1 isValid]) {
        [col1 invalidate];
        col1 = nil;
    } else {
        col1 = [NSTimer scheduledTimerWithTimeInterval:.8 target:self selector:@selector(playCol1) userInfo:nil repeats:YES];
}

崩溃是因为它试图invalidate已经无效的计时器col1无效。

您是否尝试过[col1 isValid]==YES 尝试一下,如果不起作用,请尝试使用自定义integerBOOL类型标志。

我对isValid方法有类似的问题,并使用BOOL类型的标志对其进行了解决

希望这对您有所帮助。

定制标志的使用示例:

 BOOL invalidateTimer = NO; 
-(IBAction) play 
{
     if (invalidateTimer == YES) 
     {
                 [col1 invalidate];
     }
     else if (invalidateTimer == NO)
     {
           col1 = [NSTimer scheduledTimerWithTimeInterval:.8 target:self selector:@selector(playCol1) userInfo:nil repeats:YES];
           invalidateTimer = YES;
     }
} 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM