Ho un timer che funziona per riavviare un allarme quando si spegne.NSTimer non si attiva quando NSMenu è aperto in Swift
alarm = NSTimer.scheduledTimerWithTimeInterval(
60 * minutesConstant + secondsConstant,
target:self,
selector: Selector("endSession"),
userInfo: nil,
repeats:false)
sua funzione selettore imposta un flag di modalità, e chiama la funzione originale che impostare l'allarme con nuovi minuti e secondi costanti, e invia una notifica all'utente che la sessione è riavviato.
Ho una voce di menu che viene aggiornato con il tempo rimanente
così mi è stato aprirlo per controllare che il mio allarme effettivamente riavvia, e che la notifica mostra una volta che raggiunge lo zero . Funziona, ma quando ho il menu aperto e scende fino a zero rimane solo alle 0:00 e il timer non si attiva finché non faccio clic fuori dal menu, a quel punto mostra immediatamente la notifica e ripristina il timer come previsto .
Come posso forzare il timer a sparare quando il menu è aperto? Non è un grosso problema, ma non voglio che l'utente sia confuso con la sessione si blocca solo se guardano il timer andare giù.
Questo è corretta. È fondamentalmente ciò che è possibile vedere nel menu dell'aeroporto durante la scansione periodica degli SSID – uchuugaka
In particolare, il ciclo di esecuzione viene eseguito in 'NSEventTrackingRunLoopMode' durante il monitoraggio del menu. Se il tuo timer è solo in 'NSDefaultRunLoopMode', non si attiva. Entrambe queste modalità sono nel set 'NSRunLoopCommonModes', quindi aggiungere il timer a quella pseudo-modalità gli permette di sparare in entrambi i casi (e altri). –
Perfetto, grazie per la risposta e una chiara spiegazione! –