【发布时间】:2020-05-09 21:15:16
【问题描述】:
例外是“NSWindow:-_oldFirstResponderBeforeBecoming 不是响应者的 -becomeFirstResponder 实现之外的有效消息。”但是,根据堆栈跟踪消息 is 从becomeFirstResponder 调用,所以我不知道我做错了什么。这是一个间歇性错误。
用户按下一个键命令序列,该序列触发一个菜单项,该菜单项向键窗口控制器发送一条消息,该控制器告诉窗口上的搜索字段成为第一响应者。
这是一个总结的堆栈跟踪::
[NSException raise:format:]
[NSWindow _oldFirstResponderBeforeBecoming]
[NSSearchField becomeFirstResponder]
[MyWindowController focusSearchField]
[NSApplication sendAction:to:from:]
[NSMenu performKeyEquivalent:]
窗口控制器动作的实现很简单:
public var searchField: NSSearchField?
@IBAction public func focusSearchField(sender: AnyObject) {
searchField?.becomeFirstResponder()
}
感谢您的帮助。
【问题讨论】:
-
尝试使用 becomeFirstResponder 的 dispatch_async。当按键发生时,让事件循环完成它的开启。
-
干杯我试过了。需要一段时间才能看到它是否有效,因为这是一个非常间歇性的问题。您应该发布您的评论作为答案,以便它可以被赞成/接受。
-
如果可行的话我可能会! Similar sort of issue。我使用 async 让苹果的代码完成,然后再做我需要做的事情。