异常是 "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()
}
谢谢你的帮助
我找到了一个解决方案 此处.
不使用 becomeFirstResponder
,你应该使用 NSWindow
's makeFirstResponder
方法。
public var searchField: NSSearchField?
@IBAction public func focusSearchField(sender: AnyObject) {
searchField?.window?.makeFirstResponder(searchField!)
}
我在一个有文本字段的NSPopover中遇到了这个问题。当我删除它时,我没有将contentViewController设置为nil,它也没有deallocating。当我试图打开另一个popover时,异常发生了,我明白这是因为第一个响应者从一个不在窗口中的视图中辞职了。