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)