Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 对于某些按键,performKeyEquivalent调用两次_Cocoa - Fatal编程技术网

Cocoa 对于某些按键,performKeyEquivalent调用两次

Cocoa 对于某些按键,performKeyEquivalent调用两次,cocoa,Cocoa,按“Command+”将导致两个性能相当的调用。以下是第一次调用的堆栈跟踪片段: 1 AppKit 0x00007fff903da2f9 -[NSView _performKeyEquivalent:conditionally:] + 41 2 AppKit 0x00007fff903da442 -[NSView performKeyEquivalent:] + 166 3

按“Command+”将导致两个性能相当的调用。以下是第一次调用的堆栈跟踪片段:

1   AppKit                              0x00007fff903da2f9 -[NSView _performKeyEquivalent:conditionally:] + 41
2   AppKit                              0x00007fff903da442 -[NSView performKeyEquivalent:] + 166
3   AppKit                              0x00007fff903da2f9 -[NSView _performKeyEquivalent:conditionally:] + 41
4   AppKit                              0x00007fff903da259 -[NSWindow performKeyEquivalent:] + 64
5   AppKit                              0x00007fff903da044 -[NSApplication _handleKeyEquivalent:] + 462
6   AppKit                              0x00007fff90297173 -[NSApplication sendEvent:] + 4480
第二个电话:

1   AppKit                              0x00007fff903da2f9 -[NSView _performKeyEquivalent:conditionally:] + 41
2   AppKit                              0x00007fff903da442 -[NSView performKeyEquivalent:] + 166
3   AppKit                              0x00007fff903da2f9 -[NSView _performKeyEquivalent:conditionally:] + 41
4   AppKit                              0x00007fff903da259 -[NSWindow performKeyEquivalent:] + 64
5   AppKit                              0x00007fff903da044 -[NSApplication _handleKeyEquivalent:] + 462
6   AppKit                              0x00007fff900e3927 -[NSApplication _handleSpecialAlternateKeyEquivalent:] + 656
7   AppKit                              0x00007fff9029718e -[NSApplication sendEvent:] + 4507

如您所见,第二个-performKeyEquivalent调用由-[NSApplication\u handleSpecialAlternateKeyEquivalent:]发起。那么,有谁能告诉我“Command+”键笔划有什么特别之处,它保证了不是一个而是两个性能相同的调用,以及如何过滤第二个调用?

最可能的原因是第一个调用返回了
NO
,因此AppKit会使用稍微不同的事件再次尝试。您是否覆盖了
性能等价:
?您是否第一次返回


注释来自:

不鼓励NSWindow子类重写performKeyEquivalent:。

注意:从OS X v10.5开始,如果无法识别密钥等效项,NSWindow会将其作为NSKeyDown事件发送给第一响应者。此行为使用命令键修饰符启用自定义键绑定项。此外,NSApplication通过performKeyEquivalent:将控制键事件作为NSKeyDown事件通过响应程序链发送到键窗口。此行为允许更可靠地使用控件键事件作为菜单键等效项


最有可能的原因是第一次调用返回了
NO
,因此AppKit会再次尝试使用稍微不同的事件。您是否覆盖了
性能等价:
?您是否第一次返回


注释来自:

不鼓励NSWindow子类重写performKeyEquivalent:。

注意:从OS X v10.5开始,如果无法识别密钥等效项,NSWindow会将其作为NSKeyDown事件发送给第一响应者。此行为使用命令键修饰符启用自定义键绑定项。此外,NSApplication通过performKeyEquivalent:将控制键事件作为NSKeyDown事件通过响应程序链发送到键窗口。此行为允许更可靠地使用控件键事件作为菜单键等效项


是的,我两次都返回“否”。这是我无法改变的(当然,我可以,但由于一些技术原因,我不想改变)。当每个击键只有一个调用-performKeyEquivalent时,一切都很好(大多数击键都是这样)。第二个电话把事情搞砸了。到目前为止,Cmd+是我所知道的唯一能产生这种效果的按键。我想知道为什么Cocoa的处理方式不同。是的,我两次都返回“否”。这是我无法改变的(当然,我可以,但由于一些技术原因,我不想改变)。当每个击键只有一个调用-performKeyEquivalent时,一切都很好(大多数击键都是这样)。第二个电话把事情搞砸了。到目前为止,Cmd+是我所知道的唯一能产生这种效果的按键。我想知道Cocoa为什么会有不同的处理方式。