Ho questo problema da alcuni giorni e non capisco cosa sto facendo male.timer invalido rapido non funziona
La mia applicazione è fondamentalmente solo la creazione di alcuni timer. Devo fermarli e crearne di nuovi. Ma al momento fermarli non funziona.
self.timer = NSTimer.scheduledTimerWithTimeInterval(timeInterval, target:self, selector: "timerDidEnd:", userInfo: "Notification fired", repeats: false)
Questo è il mio timer
func timerDidEnd(timer:NSTimer){
createUnrepeatedAlarmWithUpdateInterval()
}
Perché il mio timer non voleva fermarsi Attualmente sto usando il timer non ripetuto e iniziare io stesso dopo si è fermato.
func stopAlarm() {
if self.timer != nil {
self.timer!.invalidate()
}
self.timer = nil
self.timer = NSTimer()
}
Ed è così che interrompo il mio timer.
alarmManager.stopAlarm()
alarmManager.createUnrepeatedAlarmWithUpdateInterval()
Io chiamo la funzione stopAlarm()
prima di creare un nuovo timer.
Io davvero non so cosa sto facendo male così mi rendo conto ogni risposta :)
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
}
}
}
Quello è tutto il codice di questa classe. Forse questo aiuta: D
Sei sicuro che il timer non si ferma? Potrebbe essere che stai creando più timer? – Cristik
Assicurati di chiamare 'stopAlarm()' dal thread principale. –
@MariusFanu Definisco definitivamente stopAlarm dal thread principale. Ho stampato il filo per essere sicuro ed era lo stesso. – Banelu