我在侦听事件时遇到问题,我可以侦听运行良好的事件,但我无法让它停止侦听事件。我研究了它一段时间,并提出了一个方法,+(void)removeMonitor:(id)eventMonitor,它说当我完成侦听时我应该使用它
但当我尝试使用这种方法时,就像一样
[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
[NSEvent removeMonitor:event];
}];
我一直收到一个错误"-[NSEvent invalide]:无法识别的选择器发送到实例",我也对此进行了研究,我认为这意味着我正在覆盖正在使用的内存。但是我不知道如何解决这个问题。非常感谢您的任何建议或帮助!
更新多亏了JWWalker、Samir和Abizern,现在可以工作了
//I made a global variable called eventHAndler
.h文件
id eventHAndler
.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];
}
您将错误的东西传递给removeMonitor:
。对+[NSEvent addGlobalMonitorForEventsMatchingMask: handler:]
的调用返回一个称为事件处理程序对象的值。这就是可以传递给removeMonitor:
的内容。
根据:http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/EventOverview/MonitoringEvents/MonitoringEvents.html
他们说:
全局事件监视器查找调度到的用户输入事件安装它的应用程序之外的其他应用程序。监视器无法修改事件或阻止其正常传递。它可能只是如果启用了辅助功能或应用程序,则监视关键事件可访问性受信任。
所以这是不可能的,他自己说:p