Ho un problema con l'ascolto di eventi, posso ascoltare eventi che funzionano perfettamente, ma non riesco a smettere di ascoltare gli eventi. L'ho ricercato per un po 'e ho trovato il metodo a + (void) removeMonitor: (id) eventMonitor, che dice che dovrei usare quando ho finito con l'ascoltatoreCome smettere di ascoltare NSEvents?
Ma quando provo ad usare il metodo, in questo modo
[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
[NSEvent removeMonitor:event];
}];
continuo a ricevere un errore di "- [NSEvent invalidare]: selettore non riconosciuto inviato ad esempio", che ho studiato così, e credo che vuol dire che sto sovrascrivendo una memoria che è in uso. Tuttavia non so come risolvere questo problema. Qualsiasi suggerimento o aiuto è molto apprezzato!
UPDATE Grazie a JWWalker, Samir e Abizern, ora funziona
//I made a global variable called eventHAndler
file h
id eventHAndler
di file .m
eventHAndler = [NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event){
///code
}];
/// created another method called stop. When called it stops the eventHAndler
- (IBAction)Stop:(id)sender
{
stop = 1;
NSLog(@"inside stop method");
[NSEvent removeMonitor:eventHAndler];
}
Mi dispiace, sono ancora un po 'confuso. Come ottengo il valore restituito per + [NSEvent addGlobalMonitorForEventsMatchingMask: handler:^(NSEvent * event)]? –
@ A.sharif, se intendi come lo fai nel blocco che gestisce l'evento, quindi francamente non lo so, non ho mai usato i blocchi. – JWWalker
JWWalker ha ragione. Qualcosa come: id eventHAndler = [NSEvent addGlobalMonitorForEventsMatchingMask: handler:]; .... [NSEvent removeHandler: eventHAndler] Assicurarsi di rimuovere il gestore solo una volta, altrimenti si potrebbero verificare problemi di memoria. – Samir