在单击按钮以显示弹出窗口时在控制台中看到此错误:
unlockFocus called too many times. Called on <NSButton: 0x6180001404d0>
在最终找到问题之前,我复制了我的应用并剥离了它。 我可以在新项目中毫无疑问地复制它。
我是否可以问是否有人知道为什么会出现这种情况,并且知道解决方法,我会在下面的新项目中显示复制此错误的方法。
创建基于新文档的项目。 添加按钮,自定义视图以及在弹出视图中显示自定义视图所需的视图:
class Document: NSDocument {
@IBOutlet var thebutton: NSButton!
@IBOutlet var popver: NSPopover!
override init() {
super.init()
// Add your subclass-specific initialization here.
}
@IBAction func thebuttonclicked(sender: AnyObject) {
var theview = thebutton
var thebounds = thebutton.bounds
popver.showRelativeToRect(thebounds, ofView: theview, preferredEdge: NSMinXEdge)
}
现在这就是导致问题的原因...将IB中的窗口设置为&#34;显示完整尺寸的内容&#34;
通过单击按钮打开弹出窗口,运行应用程序时会看到控制台错误:
unlockFocus called too many times. Called on <NSButton: 0x6180001404d0>
虽然popover始终有效,但不选择&#34;全尺寸内容视图&#34;对于IB中的窗口导致错误永远不会被看到。
答案 0 :(得分:3)
所以来自同伴的有用输入。我找到了一个解决方法,看似操作系统中的一个错误。
而不是像往常一样调用popover。喜欢:
@IBAction func thebuttonclicked(sender: AnyObject) {
var theview = thebutton
var thebounds = thebutton.bounds
popver.showRelativeToRect(thebounds, ofView: theview, preferredEdge: NSMinXEdge)
}
我必须将dispatch_async发送到这样的启动弹出窗口函数:
@IBAction func thebuttonclicked(sender: AnyObject) {
dispatch_async(dispatch_get_main_queue()) {
self.launchmypopover()
}
}
func launchmypopover(){
var theview = thebutton
var thebounds = thebutton.bounds
popver.showRelativeToRect(thebounds, ofView: theview, preferredEdge: NSMinXEdge)
}
我就这个问题提出了一个雷达。在发布修复程序之前,我必须使用此方法。