无法停止 NSTimer
Cannot stop NSTimer
我知道在 Whosebug 上有很多这样的问题,但我是这样的。我仍然无法停止我的 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 在 viewWillDisappear 但函数 timeStick 仍然 运行。请帮助我
编辑 抱歉我犯了愚蠢的错误。问题是我创建了另一个新的 one timer var timer。它必须self.timer进入函数setupTimerForRecord
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() 之前创建所有变量。
我认为这是因为您在 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)
})
}
我知道在 Whosebug 上有很多这样的问题,但我是这样的。我仍然无法停止我的 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 在 viewWillDisappear 但函数 timeStick 仍然 运行。请帮助我
编辑 抱歉我犯了愚蠢的错误。问题是我创建了另一个新的 one timer var timer。它必须self.timer进入函数setupTimerForRecord
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() 之前创建所有变量。
我认为这是因为您在 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)
})
}