我有以下代码在我的MacOS应用程序中显示一个新窗口。这在completionHandlerNSOpenPanel范围内。

let mainStoryBoard = NSStoryboard(name: NSStoryboard.Name(rawValue: "Main"), bundle: nil)
let windowController = mainStoryBoard.instantiateController(withIdentifier: NSStoryboard.SceneIdentifier(rawValue: "WindowController")) as! NSWindowController
let myController = windowController.window!.contentViewController as! ViewController
myController.imageView.image = mainImage
windowController.showWindow(self)

mainImage定义在此之上。
问题是这段代码在MacOS High Sierra上运行得很好,但在MacOS Sierra上,窗口有时会显示一瞬间,然后消失。
为什么这会对Macos High Sierra而不是Macos Sierra起作用?

最佳答案

我可以通过固定windowController的范围来解决这个问题。将变量的声明移动到完成处理程序上方并将其设置为nil以开始解决问题。
我还添加了NSWindowDelegate并使用函数windowWillClosewindowController设置回nil以确保它被正确释放。

10-08 05:28