2015-08-28 88 views
1

我知道有很多這樣的問題在stackoverflow,但與我。我仍然無法阻止我的NSTimer。下面是我的代碼:不能停止NSTimer

func setupTimerForRecord(){ 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     var timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true) 
    }) 
} 

和功能停止:

func resetTimmerLabel(){ 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.timer?.invalidate() 
     self.timer = nil 
     self.timeMin = 0 
     self.timeSec = 0 
     var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec]) 
     self.lblTimer.text = timeString 
    }) 
} 

功能選擇:

func timeStick(timer: NSTimer){ 
    print("timeStick") 
    self.timeSec++ 
    if self.timeSec == 60{ 
     self.timeSec = 0 
     self.timeMin++ 
    } 
    var timeString = String(format: "%02d:%02d", arguments: [self.timeMin, self.timeSec]) 
    lblTimer.text = timeString 
} 

通話在按鈕setupTimerForRecord點擊。和resetTimmerLabel at viewWillDisappear但函數timeStick仍然運行。請幫我

編輯 SORRY爲我的愚蠢的錯誤。問題是我創建了另一個新的定時器變量定時器。它必須self.timer到函數setupTimerForRecord

回答

1

我認爲它是因爲你在setupTimerForRecord()中創建了一個名爲timer的重複局部變量。將其設置爲self.timer。

func setupTimerForRecord(){ 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true) 
    }) 
} 
+0

你說得對。我會盡快接受你的回答。謝謝。 – lee

1
var timer = NSTimer() 

func setupTimerForRecord(){ 
    dispatch_async(dispatch_get_main_queue(), {() -> Void in 
     self.timer = NSTimer.scheduledTimerWithTimeInterval(1.0, target: self, selector: Selector("timeStick:"), userInfo: nil, repeats: true) 
    }) 
} 

創建全球定時器變量。我的意思是在所有功能之外。最佳做法是在viewDidLoad()之前創建所有變量,通常在其他函數中需要這些變量。

+0

不是我倒票,但方法** scheduledTimerWithTimeInterval **將創建並返回一個計時器。它不需要添加** var timer = NSTimer()** – lee

+0

ohk。知道了夥計 –