例外情况是" NSWindow:-_oldFirstResponderBeforeBecoming不是响应者的-becomeFirstResponder实现之外的有效消息。"但是,根据堆栈跟踪,消息 从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()
}
感谢您的帮助。
答案 0 :(得分:9)
我找到了解决方案here。
您应该使用becomeFirstResponder
' NSWindow
方法,而不是makeFirstResponder
。
public var searchField: NSSearchField?
@IBAction public func focusSearchField(sender: AnyObject) {
searchField?.window?.makeFirstResponder(searchField!)
}
答案 1 :(得分:0)
我在带有文本字段的NSPopover中遇到了这个问题。当我删除它时,我没有将contentViewController设置为nil,也没有取消分配。当我尝试打开另一个弹出窗口时,发生了异常,我知道这是因为第一响应者从不在窗口中的视图中辞职了