簡體   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