迅速无效计时器不起作用

我有这个问题几天了,我不明白我做错了什么。

我的应用程序基本上只是创build一些定时器。 我需要阻止他们,创造新的。 但目前阻止他们不起作用。

self.timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target:self, selector: "timerDidEnd:", userInfo: "Notification fired", repeats: false) 

这是我的计时器

 func timerDidEnd(timer:NSTimer){ createUnrepeatedAlarmWithUpdateInterval() } 

因为我的计时器不想停止我正在使用不重复的计时器,并停止后自己启动它。

 func stopAlarm() { if self.timer != nil { self.timer!.invalidate() } self.timer = nil self.timer = NSTimer() } 

这就是我如何阻止我的计时器。

 alarmManager.stopAlarm() alarmManager.createUnrepeatedAlarmWithUpdateInterval() 

我在创build一个新的定时器之前调用stopAlarm()函数。

我真的不知道我在做什么错,所以我感谢每一个答案:)

 class AlarmManager: ViewController{ private var timer : NSTimer? private var unrepeatedTimer : NSTimer? private let notificationManager = NotificationManager() private var current = NSThread() private let settingsViewController = SettingsViewController() func createRepeatedAlarmWithUpdateInterval(){ var timeInterval:NSTimeInterval = settingsViewController.getUpdateIntervalSettings() if timer == nil{ timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "repeatedTimerDidEnd:", userInfo: "Notification fired", repeats: true) } } func repeatedTimerDidEnd(repeatedTimer:NSTimer){ ConnectionManager.sharedInstance.loadTrainings(settingsViewController.getServerSettings()) createUnrepeatedAlarm(10) } func createUnrepeatedAlarm(timeInterval:Double){ unrepeatedTimer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "unrepeatedTimerDidEnd:", userInfo: "Notification fired", repeats: false) } func unrepeatedTimerDidEnd(unrepeatedTimer:NSTimer){ notificationManager.createNotification(self, reminderType: NotificationManager.ITEMRATINGREMINDER) notificationManager.createNotification(self, reminderType: NotificationManager.ITEMREMINDER) print("UnrepeatedAlarm ended") } func stopAlarm(){ print("StopAlarm triggered") if (timer != nil) { print("stoptimer executed") timer!.invalidate() timer = nil } if (unrepeatedTimer != nil) { unrepeatedTimer!.invalidate() unrepeatedTimer = nil } } } 

那就是这个类的全部代码。 也许这有助于:D

通常的安全启动和停止计时器的方法是

 var timer : NSTimer? func startTimer() { if timer == nil { timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target: self, selector: "timerFired", userInfo: nil, repeats: true) } } func stopTimer() { if timer != nil { timer!.invalidate() timer = nil } } 

startTimer()仅在nil时才启动定时器, stopTimer()仅在不nil停止定时器。

在创build/启动新计时器之前,您只需要注意停止计时器。

Swift 3中取代

  • NSTimerTimer
  • NSTimer.scheduledTimerWithTimeInterval( Timer.scheduledTimer(timeInterval:
  • selector: "timerFired"selector: #selector(timerFired)