2012-02-09 125 views
0

http://www.youtube.com/watch?v=5al6qqRzzQg當我點擊開始超過一次? 將我需要做什麼這個NSTimer爲什麼會崩潰?

#import "FirstViewController.h" 

@implementation FirstViewController 

-(IBAction)start;{ 

    myticker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 
-(IBAction)stop;{ 

    [myticker invalidate]; 
} 
-(IBAction)reset;{ 

    time.text = @"0"; 
} 
-(void)showActivity;{ 

    int currentTime = [time.text intValue]; 
    int newTime = currentTime + 1; 
    time.text = [NSString stringWithFormat:@"%d", newTime]; 
} 


- (void)didReceiveMemoryWarning 
+0

-1:沒有崩潰日誌。沒有錯誤描述。該視頻甚至沒有崩潰。 – 2012-02-09 15:52:27

+1

如果你真的閱讀代碼,問題很明顯。 – 2012-02-09 15:53:56

回答

0

更改您的啓動和停止的方法是:

-(IBAction)start;{ 

    [myticker invalidate]; 
    myticker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
} 

-(IBAction)stop;{ 

    [myticker invalidate]; 
    myticker = nil; 
} 

這將阻止它崩潰。此外,您應該添加此:

-(void)dealloc 
{ 
    [myticker invalidate]; 
} 
+0

喜交配感謝,因爲它的工作原理,但是我做了 - (void)dealloc { [myticker invalidate]; }它有什麼作用? – user1196885 2012-02-09 15:40:49

+0

只是把它放在你的視圖控制器中。它確保當你的視圖控制器被釋放時,你的計時器不會繼續。 – 2012-02-09 15:51:33

+0

是的,你需要在這種情況下使計時器無效。但不,你不需要在dealloc中添加'[myticker invalidate]'。這是毫無意義的。由於定時器保留了目標,因此您將永遠不會進入dealloc,直到它有效。換句話說,dealloc被調用的事實意味着保留計數爲零,因此計時器已經失效。 – Davyd 2013-07-03 06:35:39

0

一個布爾變量添加到您的類的頭,像timerIsActive

-(IBAction)start;{ 
if (!timerIsActive) { 
    myticker = [NSTimer scheduledTimerWithTimeInterval:1.0 target:self selector:@selector(showActivity) userInfo:nil repeats:YES]; 
    timerIsActive = YES; 

} 
} 

-(IBAction)stop;{ 
    timerIsActive = NO; 
    [myticker invalidate]; 
} 
+0

@implementation FirstViewController - (IBAction爲)啓動; { 如果(timerIsActive){ myticker = [的NSTimer scheduledTimerWithTimeInterval:1.0目標:自選擇器:@selector(showActivity)USERINFO:無重複:YES]; timerIsActive = YES; } } -(IBAction)stop; { timerIsActive = NO; [myticker invalidate]; } - (IBAction)reset; { time.text = @「0」; } - (void)showActivity; { – user1196885 2012-02-09 15:20:43

+0

它現在說未申報的標識符? – user1196885 2012-02-09 15:21:53