我正在尝试以编程方式将NSDrawer添加到我的应用程序的主窗口(该窗口还具有在IB中设置的NSOutlineView):

伊娃:

var dd: NSDrawer? = nil


然后,当单击显示三角形按钮时:

if dd == nil {
            var drawer_rect = NSInsetRect(self.window.frame, 30, 30).size
            drawer_rect.height = 150
            dd = NSDrawer.init(contentSize: drawer_rect, preferredEdge: NSRectEdge.minY)
            dd!.contentView = self.status_scroll
            dd!.parentWindow = self.window
        }


因此,当用户尝试“公开”抽屉时,上面的代码会创建一个NSDrawer,然后显示它。一切正常,但是当设置了parentWindow时,Xcode转储以下内容:

[General] ERROR: Setting <NSOutlineView: 0x100f0b9b0> as the first responder for window <NSDrawerWindow: 0x100fc8900>, but it is in a different window (<NSWindow: 0x6080001e0600>)! This would eventually crash when the view is freed. The first responder will be set to nil.
(
    0   AppKit                              0x00007fff9fc289cf -[NSWindow _validateFirstResponder:] + 557
    1   AppKit                              0x00007fff9f3a374c -[NSWindow _setFirstResponder:] + 31
    2   AppKit                              0x00007fff9f90c35b -[NSDrawerWindow _setParentWindow:] + 64
    3   AppKit                              0x00007fff9f90b666 -[NSDrawer(DrawerInternals) _doSetParentWindow:] + 382
    4   AppKit                              0x00007fff9f907786 -[NSDrawer setParentWindow:] + 78


注释掉parentWindow的设置,什么都不会转储到控制台。

最佳答案

NSDrawer已根据Apple documentation弃用。您应该考虑不同的设计。如果仍然使用NSDrawer,则可能会遇到此类问题。

关于macos - 将NSDrawer添加到应用程序窗口时会导致崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45353801/

10-10 17:08