Tengo un problema con la escucha de eventos, puedo escuchar eventos que funcionan perfectamente, pero no puedo dejar de escuchar eventos. Investigué por un tiempo y se me ocurrió el método a, + (void) removeMonitor: (id) eventMonitor, que dice que debo usar cuando termino con el oyente¿Cómo dejar de escuchar NSEvents?
Pero cuando intento usar el método, al igual que
[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
[NSEvent removeMonitor:event];
}];
sigo obteniendo un error de "- [NSEvent invalida]: selector no reconocido enviado a la instancia" ¿Qué he investigado también, y yo creo que significa que estoy sobrescribir una memoria que es siendo utilizado. Sin embargo, no sé cómo resolver este problema. ¡Cualquier sugerencia o ayuda es muy apreciada!
ACTUALIZACIÓN Gracias a JWWalker, Samir y Abizern, que ahora trabaja
//I made a global variable called eventHAndler
archivo .h
id eventHAndler
archivo .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];
}
Lo siento, todavía estoy un poco confundido. ¿Cómo obtengo el valor devuelto para + [NSEvent addGlobalMonitorForEventsMatchingMask: handler:^(NSEvent * event)]? –
@ A.sharif, si te refieres a cómo lo consigues en el bloque que maneja el evento, entonces, francamente, no sé, nunca he usado bloques. – JWWalker
JWWalker tiene razón. Algo como: id eventHAndler = [NSEvent addGlobalMonitorForEventsMatchingMask: handler:]; .... [NSEvent removeHandler: eventHAndler] Asegúrese de quitar el controlador solo una vez, de lo contrario, puede experimentar problemas de memoria. – Samir