NSSearchField偶尔会导致NSInternalInconsistencyException

时间:2015-06-24 00:14:41

标签: macos cocoa appkit

例外情况是" 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()
}

感谢您的帮助。

2 个答案:

答案 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,也没有取消分配。当我尝试打开另一个弹出窗口时,发生了异常,我知道这是因为第一响应者从不在窗口中的视图中辞职了