[英]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
? 嘗試一下,如果不起作用,請嘗試使用自定義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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.