我在头文件中声明了我的NSTimer。点击play
按钮后,它会打开计时器。下一步点击禁用计时器。第三次点击应用程序崩溃没有错误消息。为什么会这样?
-(IBAction) play {
if ([col1 isValid]) {
[col1 invalidate];
} else {
col1 = [NSTimer scheduledTimerWithTimeInterval:.8 target:self selector:@selector(playCol1) userInfo:nil repeats:YES];
}
答案 0 :(得分:4)
invalidate
将导致对象被释放。因此,您试图在错误的引用上调用isValid
。 1}}对象在你使它失效后没有用,你应该没问题。
col1
答案 1 :(得分:2)
崩溃是因为它试图invalidate
已经失效的计时器col1
。
你试过[col1 isValid]==YES
吗?
试试这个,如果不起作用,请尝试使用自定义的integer
或BOOL
类型标记。
我遇到了与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;
}
}