2015-11-05 68 views
2

我有一個NSTimer設置了150秒,當它下降到0時,它應該停止計數並結束我創建的遊戲。但是,當我調用invalidate()時,它會繼續。我也有它,所以它應該打印「定時器停止」,當計時器失效,但沒有運氣。有沒有另一種方式來呢?NSTimer失效無效

這裏是我的代碼:

import SpriteKit 
var countDown: NSTimer() 

class GameScene: SKScene { 
    override func didMoveToView(view:SKView) 
    countDown = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: "subtractTime", userInfo: nil, repeats: true) 

} 
override func update() { 
    if countDown == 0 { 
     countDown.invalidate() 
     print("Timer stopped") 
    } 

回答

7

這是因爲你與Int值進行比較countDown。如果您在啓動時需要無效計時器 - 請在subtractTime方法中執行。

你還提到你設置了你的計時器150秒。但在代碼示例中,它是1.0。所以我建議你希望你的選擇器在一秒鐘內被調用150次。如果是這樣,您可以簡單地添加計數器變量:

var counter = 0 
... 
func subtractTime() { 
    counter += 1 
    if counter == 150 { 
    countDown.invalidate() 
    countDown = nil // also add this line to escape retain cycle 
    return 
    } 
    ... 
} 
+0

非常感謝!我試試看,並給你一些反饋! –

+0

所以,當我添加countDown = nil,我得到一個錯誤,說:「不能將類型NilLiteralConvertable的值分配給類型爲」NSTimer「的值 –

+0

不要緊!我修復它,它完美的工作!謝謝一堆! –