如何停止收听NSEvents?

A.s*_*rif 7 cocoa objective-c nsevent

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

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

[NSEvent addGlobalMonitorForEventsMatchingMask:(NSLeftMouseDownMask|NSKeyDownMask) handler:^(NSEvent *event) {
    [NSEvent removeMonitor:event];
}];
Run Code Online (Sandbox Code Playgroud)

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

更新感谢JWWalker,Samir和Abizern,它现在有效

//I made a global variable called eventHAndler
Run Code Online (Sandbox Code Playgroud)

.h文件

id eventHAndler
Run Code Online (Sandbox Code Playgroud)

.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];
}
Run Code Online (Sandbox Code Playgroud)

JWW*_*ker 17

你传递错误的东西removeMonitor:.调用+[NSEvent addGlobalMonitorForEventsMatchingMask: handler:]返回一个名为事件处理程序对象的值.这是可以传递给的removeMonitor:.