Objective c 无法使用void类型的右值初始化NSEvent*类型的参数

Objective c 无法使用void类型的右值初始化NSEvent*类型的参数,objective-c,Objective C,你好。我试图监控用户在可可应用程序中按下的按键 我使用了以下代码: // this code works! CGEventMask keyboardMaskKeyDown = CGEventMaskBit(kCGEventKeyDown); keyboardEventresult = [NSEvent addGlobalMonitorForEventsMatchingMask:keyboardMaskKeyDown handler:^(NSEvent *keyboardEvent) {

你好。我试图监控用户在可可应用程序中按下的按键

我使用了以下代码:

 // this code works!
 CGEventMask keyboardMaskKeyDown = CGEventMaskBit(kCGEventKeyDown);

 keyboardEventresult = [NSEvent addGlobalMonitorForEventsMatchingMask:keyboardMaskKeyDown handler:^(NSEvent *keyboardEvent)
 {
      keyboardEventresult = keyboardEvent;
      _currentKeystr = [NSString stringWithFormat:@"%c",[[keyboardEvent characters]characterAtIndex:0]];
      NSLog(@"Pressed key: %@",_currentKeystr);
      [hiddentextfield setStringValue:[NSString stringWithFormat:@"%@",_currentKeystr]];
  }];
但问题是当我改变时:

 addGlobalMonitorForEventsMatchingMask

我收到一个错误,说明
无法用void(^)(NSEvent*\u strong)类型的右值初始化NSEvent*(^)(NSEvent*\u strong)类型的参数

你可以看到苹果也在做类似的事情

         _eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:

        (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask)

        handler:^(NSEvent *incomingEvent) 

关于如何解决这个问题有什么想法吗?

错误消息告诉您传递了错误类型的参数。它期望的是
NSEvent*(^)(NSEvent*\u strong)
(一个块接受一个
NSEvent*
类型的参数并返回
NSEvent*
),但您传递的是一个
void(^)(NSEvent*\u strong)
(一个块,使用一个
NSEvent*
类型的参数并返回
void
。请注意它们必须完全匹配的块的返回类型的差异


要解决此问题,请使块返回
NSEvent*
。根据,您需要“返回未修改的事件,创建并返回新的NSEvent对象,或返回nil以停止事件的分派。”因此,在块的末尾添加一个
return;
语句,其中
是同一事件、新事件或
nil

谢谢,我没有注意到:)
         _eventMonitor = [NSEvent addLocalMonitorForEventsMatchingMask:

        (NSLeftMouseDownMask | NSRightMouseDownMask | NSOtherMouseDownMask | NSKeyDownMask)

        handler:^(NSEvent *incomingEvent)