带有屏幕参数的NSWindow初始化程序在初始化时会导致致命错误



我有一个简单的NSWindow子类,并且有一些返回NSWindow的逻辑。当将screen传入NSWindow的初始化程序时,应用程序会导致

Fatal error: Use of unimplemented initializer 'init(contentRect:styleMask:backing:defer:)' for class 'myClass'

这里有一大块代码:

class myClass: NSWindow {
init() {
...
super.init(contentRect: NSRect(x: 0, y: 0, width: 100, height: 100),
styleMask: .borderless,
backing: .buffered,
defer: false,
screen: /* returned NSScreen */) // this crashes
...
}
}

我不确定是什么原因造成的,我已经检查过NSScreens.screens返回了一个由两个非零屏幕组成的数组(对于我的两个监视器(,并且我可以从它们中获取所有必要的数据。

为什么将它传递到初始化程序会崩溃?

(我已经确保逻辑不是问题所在;在screen:参数中仅使用NSScreen.screens[0]进行测试也会导致崩溃。(

提前谢谢。

原来Xcode和往常一样,错误消息非常糟糕。在一个全新的测试项目中运行了这个,并得到了的实际错误

Must call a designated initializer of the superclass 'NSWindow'

带屏幕的NSWindow中的初始化程序是它的方便初始化程序,不能从子类中调用。阅读此处了解更多信息:为什么可以';Swift初始化程序在其超类上调用便利初始化程序吗?

初始化NSWindow本身而不进行子类化可能是一个临时解决方案,具体取决于您的应用程序结构。

最新更新