NSWindow全尺寸内容视图和启动弹出窗口会导致错误

时间:2015-02-16 22:57:04

标签: macos swift nswindow nspopover

在单击按钮以显示弹出窗口时在控制台中看到此错误:

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;

IB Setting for window

通过单击按钮打开弹出窗口,运行应用程序时会看到控制台错误:

unlockFocus called too many times. Called on <NSButton: 0x6180001404d0>

虽然popover始终有效,但不选择&#34;全尺寸内容视图&#34;对于IB中的窗口导致错误永远不会被看到。

1 个答案:

答案 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)
}

我就这个问题提出了一个雷达。在发布修复程序之前,我必须使用此方法。