0

我想NSColorPanel在用户点击NSColorWell. 当用户点击颜色池时面板会打开,但即使在用户关闭面板后面板的实例也会保持不变。

所以我将其设置releasedWhenClosedtrue. 但是,这一次当用户关闭窗口时面板被正确释放,但下次用户通过点击相同颜色的井打开面板时,应用程序崩溃,因为面板实例已经消失。

如何关闭窗口但让用户再次启动颜色?具体来说,我将颜色井的activate:方法设置为以下内容:

override func activate(exclusive: Bool) {
    NSColorPanel.sharedColorPanel().showsAlpha = true // the app crashes here the next time the user opens the color well
    super.activate(exclusive)
}
4

1 回答 1

2

NSColorPanel是一个单例,它是懒加载的。只能创建一个实例NSColorPanelsharedColorPanel颜色面板在第一次调用时加载到内存中。如果你释放这个面板,下次你访问它时应用程序会崩溃,因为NSColorPanel类保持对释放实例的引用。Apple 没有提供在sharedColorPanel使用后清除资源的方法。

于 2016-03-07T17:34:01.253 回答