2012-05-04 298 views
0

以下方法導致崩潰。用戶界面就像一個按鈕,它處理NSTimer的開始/停止功能。如果定時器運行,則更新UILabel。使用viewDidLoad方法使我的計時器工作,停止工作,但再次啓動會崩潰應用程序。NSTimer導致崩潰

刪除viewDidLoad方法中的alloc並嘗試使用開始按鈕導致崩潰立即。即使NSLog(@"Start now");未被調用。

代碼:

- (void)tick { 
NSLog(@"tick"); 
float value = [moneyLabel.text floatValue]; 
moneyLabel.text = [NSString stringWithFormat:@"%f", value + 1.0]; 

} 

- (IBAction)startStopButtonClicked:(UIButton *)sender { 
if ([sender.titleLabel.text isEqualToString:@"Start"]) { 
    NSLog(@"Start now"); 
    if (timer) { 
     NSLog(@"Timer valid"); 
     [timer fire]; 
    } else { 
     NSLog(@"Timer is nil"); 
     timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(tick) userInfo:nil repeats:YES]; 
     [timer fire]; 
    } 

    NSLog(@"bla"); 

    [sender setTitle:@"Stop" forState:UIControlStateNormal]; 
} else { 
    [timer invalidate]; 
    timer = nil; 
    NSLog(@"Stopped."); 
    NSLog(@"Timer isValid: %@", timer); 
    [sender setTitle:@"Start" forState:UIControlStateNormal]; 
} 
} 
+1

發佈您的崩潰日誌。 – Devang

+0

是PLZ發表您的崩潰日誌,以便我們可以幫助你... – sandy

+0

***終止應用程序由於未捕獲的異常「NSInvalidArgumentException」,原因是:「 - [__ NSCFArray startStopButtonClicked:]:無法識別的選擇發送到實例0x683d8e0」 – DAS

回答

0

你的代碼已經發布的作品 - 只是測試它在一個新項目中,所以問題可能在其他地方。我只通過在viewDidLoad:或指定的初始化程序中聲明而沒有任何初始化來測試它。

+1

問題是在AppDelegate中沒有添加rootViewController。 WTF。 – DAS

3

我不認爲需要調用[NSTimer fire]可言;它應該足以讓計時器決定何時開火。

首先確保timernil(它應該是,如果它的對象的實例變量),雖然明確地將它設置爲nil- (id)init不會受到傷害。

接下來我會使用定時器本身的狀態,以確定啓動/停止是否被按下,而不是在按鈕上的文字:根據需要

- (IBAction)startStopButtonClicked:(UIButton *)sender 
{ 
    if (timer != nil) 
    { 
     NSLog(@"Stopping timer"); 
     [timer invalidate]; 
     timer = nil; 
    } 
    else 
    { 
     NSLog(@"Starting timer"); 
     timer = [NSTimer scheduledTimerWithTimeInterval:1 
               target:self 
               selector:@selector(tick) 
               userInfo:nil 
               repeats:YES]; 
    } 

    [sender setTitle:(timer != nil ? @"Stop" : @"Start") 
      forState:UIControlStateNormal]; 
} 
+0

** *終止應用程序,由於未捕獲異常'NSInvalidArgumentException',原因:' - [__ NSCFArray startStopButtonClicked:]:無法識別的選擇器發送到實例0x683d8e0' – DAS

+0

@達爾文這看起來像是你已發佈的代碼之外的崩潰。鑑於另一個答案似乎表明這個代碼的作品,它看起來像你在錯誤的地方看。 – trojanfoe

+0

除此之外,我的項目中沒有任何代碼......其他所有內容都是像viewDidLoad一樣的標準。多麼糟糕...... – DAS