我在侦听事件时遇到问题,我可以听取完美运行的事件但是我不能让它停止听事件。我研究了一段时间,并提出了一个方法,+(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];
}
答案 0 :(得分:15)
你将错误的内容传递给removeMonitor:
。对+[NSEvent addGlobalMonitorForEventsMatchingMask: handler:]
的调用返回一个称为事件处理程序对象的值。这就是可以传递给removeMonitor:
的内容。
答案 1 :(得分:0)
他们说:
全局事件监视器查找分派给的用户输入事件 应用程序不是安装它的应用程序。显示器 无法修改活动或阻止其正常投放 。它可能只是 如果启用了辅助功能或应用程序,则监视关键事件 信任可访问性。
所以说这个男人自己是不可能的:P