2013-02-04 42 views
1

我的countDown計時器有一個奇怪的問題。該計時器從設定時間(即60秒)開始倒計時。這部分代碼放在myViewDidLoad方法中。一切工作,除非我回去再次加載視圖。每次加載視圖時,倒數計時增加1秒。停止NSTimer保持增加間隔

例如:

  1. 第一負載:60,59,58 ...
  2. 第二負載:60,58,56 ...
  3. 第三負載:60,57,54。 ..

我的代碼如下。有誰知道爲什麼會發生這種情況?我需要在某個地方發佈某些東西嗎?謝謝!

countDown=[NSTimer scheduledTimerWithTimeInterval:1.0 target:self 
selector:@selector(TimeOver) userInfo:nil repeats:YES]; 

回答

6

每次加載視圖時,都會創建一個新的定時器,但舊定時器仍然存在。在你的計時器的操作方法TimeOver中,你正在遞減一個跟蹤秒數的索引變量,並且每次計時器在每次觸發時都運行該方法。所以,如果你有三個定時器,那麼索引每次會減少三個。

你需要或者不只要當你的視野中消失新建一個新的計時器視圖負載或更好,破壞定時器:當它再次出現

[countDown invalidate]; 
countdown = nil; 

並重新創建它。

此外,請注意您的計時器的操作方法有不正確的簽名。它應是沒有返回,並採取一個參數的方法,這是定時器本身,就像這樣:

- (void)timeOver: (NSTimer *)tim; 

另外,Cocoa方法不應該以大寫字母開頭。

+0

謝謝喬希,我試試吧。無效的代碼應該放在viewdidUnLoad中? – Brandon

+0

聽起來像個好地方。 –

+0

是否有可能使viewdidload中的所有實例無效,然後在該方法下創建一個新實例? – Brandon