目标C:定时器在第二次打开时崩溃应用程序

时间:2011-03-31 17:53:27

标签: iphone objective-c nstimer

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

-(IBAction) play {

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

2 个答案:

答案 0 :(得分:4)

invalidate将导致对象被释放。因此,您试图在错误的引用上调用isValid

col1

答案 1 :(得分:2)

崩溃是因为它试图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;
     }
}