2016-03-07 5 views
0

Я хочу сделать NSColorPanel запущен, когда пользователь нажимает на NSColorWell. Панель открывается, когда пользователь правильно набирает цвет, но экземпляр панели будет удерживаться даже после того, как пользователь закроет панель.Как освободить NSColorPanel?

Поэтому я установил его releasedWhenClosed на номер true. Однако на этот раз панель открывается правильно, когда пользователь закрывает окно, но в следующий раз, когда пользователь откроет панель, нажав на тот же самый колодец, приложение выйдет из строя, потому что экземпляр панели уже исчез.

Как закрыть окно, но снова запустите цвет снова? В частности, я поставил 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) 
} 

ответ

2

NSColorPanel одноэлементен, который загружается лениво. Может быть создан только один экземпляр NSColorPanel. Цветная панель загружается в память при первом вызове sharedColorPanel. Если вы отпустите эту панель, приложение выйдет из строя в следующий раз, когда вы получите к ней доступ, потому что класс NSColorPanel сохраняет ссылку на выпущенный экземпляр. Apple не предоставляет способ очистки ресурсов после использования sharedColorPanel.