如何停止收听NSEvents?

时间:2012-08-19 23:28:05

标签: objective-c cocoa nsevent

我在侦听事件时遇到问题,我可以听取完美运行的事件但是我不能让它停止听事件。我研究了一段时间,并提出了一个方法,+(void)removeMonitor:(id)eventMonitor,它说我应该在我完成监听器时使用

但是当我尝试使用这种方法时,就像这样

[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
    [NSEvent removeMonitor:event];
}];

我一直收到错误“ - [NSEvent invalidate]:无法识别的选择器发送到实例”我也研究过,我相信这意味着我要覆盖正在使用的内存。但是我不知道如何解决这个问题。非常感谢任何建议或帮助!

更新感谢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];
}

2 个答案:

答案 0 :(得分:15)

你将错误的内容传递给removeMonitor:。对+[NSEvent addGlobalMonitorForEventsMatchingMask: handler:]的调用返回一个称为事件处理程序对象的值。这就是可以传递给removeMonitor:的内容。

答案 1 :(得分:0)

根据:http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/EventOverview/MonitoringEvents/MonitoringEvents.html

他们说:

  

全局事件监视器查找分派给的用户输入事件   应用程序不是安装它的应用程序。显示器    无法修改活动或阻止其正常投放 。它可能只是   如果启用了辅助功能或应用程序,则监视关键事件   信任可访问性。

所以说这个男人自己是不可能的:P