我有一个简单的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
本身而不进行子类化可能是一个临时解决方案,具体取决于您的应用程序结构。