我有一個啓動按鈕,以.h文件中聲明的計時器開始。然後,我有一個停止按鈕,它不會執行[theTimer invalidate];
,然後當我用啓動按鈕再次啓動計時器時,由於被無效而導致錯誤。啓動按鈕啓動NSTimer,停止按鈕停止它,啓動按鈕再次啓動它。但'無效'給我一個錯誤?
任何想法如何解決這個問題?
我有一個啓動按鈕,以.h文件中聲明的計時器開始。然後,我有一個停止按鈕,它不會執行[theTimer invalidate];
,然後當我用啓動按鈕再次啓動計時器時,由於被無效而導致錯誤。啓動按鈕啓動NSTimer,停止按鈕停止它,啓動按鈕再次啓動它。但'無效'給我一個錯誤?
任何想法如何解決這個問題?
API documentation在這一點上是非常具體的:
一旦失效,定時器對象不能重用。
所以,只需創建一個新的計時器。如果你只在用戶按下按鈕時才這樣做,它不會殺死你的表現。
NSTimer類的使用有些尷尬;而不是將創建/銷燬與開始/停止分開,而是全部彙集在一起。換句話說,計時器一旦創建就立即啓動,一旦它被銷燬就停下來。
因此,您需要使用NSTimer對象的存在作爲標誌來指示它是否正在運行;是這樣的:
//私有方法
@interface MyClass的(){ 的NSTimer * _timer; } - (void)_timerFired; @end
@implementation MyClass的
(IBAction爲)startTimer所:(ID)發送方 { 如果(_timer ==無) { _timer = [的NSTimer scheduledTimerWithTimeInterval:1.0F 目標: self selector:@selector(_timerFired) userInfo:nil repeats:YES] retain]; } }
(IBAction爲)stopTimer:(ID)發送方 { 如果(!_timer =無) { [_timer無效]; _timer = nil; } }
(無效)_timerFired { 的NSLog(@ 「平」); }
後您正在使用的代碼示例。 – WrightsCS 2011-02-10 04:12:46
@Nikita Rybak有正確的答案。你可能會得到一個更詳細的答案,@安德魯,如果你發佈你的code_。 – aqua 2011-02-10 04:18:33