NSSearchField偶尔会导致NSInternalInconsistencyException异常。

问题描述 投票:5回答:2

异常是 "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()
}

谢谢你的帮助

macos cocoa appkit
2个回答
9
投票

我找到了一个解决方案 此处.

不使用 becomeFirstResponder,你应该使用 NSWindow's makeFirstResponder 方法。

public var searchField: NSSearchField?
@IBAction public func focusSearchField(sender: AnyObject) {
    searchField?.window?.makeFirstResponder(searchField!)
}

0
投票

我在一个有文本字段的NSPopover中遇到了这个问题。当我删除它时,我没有将contentViewController设置为nil,它也没有deallocating。当我试图打开另一个popover时,异常发生了,我明白这是因为第一个响应者从一个不在窗口中的视图中辞职了。

© www.soinside.com 2019 - 2024. All rights reserved.