NSDrawer 在添加到 App 时导致崩溃 Window
NSDrawer causes crash when added to App Window
我正在尝试以编程方式将 NSDrawer
添加到我的应用程序的主 window(它还有一个 NSOutlineView
,它是在 IB 中设置的):
伊瓦尔:
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
}
所以当用户试图'disclose'抽屉时,上面的代码会创建一个NSDrawer
然后显示它。一切正常,但 Xcode 在设置 parentWindow
时转储以下内容:
[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
,您可能会遇到这样的问题。
我正在尝试以编程方式将 NSDrawer
添加到我的应用程序的主 window(它还有一个 NSOutlineView
,它是在 IB 中设置的):
伊瓦尔:
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
}
所以当用户试图'disclose'抽屉时,上面的代码会创建一个NSDrawer
然后显示它。一切正常,但 Xcode 在设置 parentWindow
时转储以下内容:
[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
,您可能会遇到这样的问题。