NSColor с калиброванными значениями работает иначе, чем обычный цвет? - PullRequest
1 голос
/ 21 февраля 2009

Я использую метод в моем представлении, чтобы установить цвет, и в awakeFromNib я передаю ему цвет, используя [NSColor colorWithCalibratedRed: зеленый: синий: альфа:]

Приложение продолжало аварийно завершать работу с ошибкой «[NSCFNumber set] нераспознанный селектор». Вставив точку останова, я обнаружил, что она определяет мою переменную как «NSCalibratedRGBColor». Приложение работало, когда я определял цвет одним из удобных методов (blueColor, whiteColor и т. Д.). Я думал, что это просто ярлык для установки значений RGB. Я понятия не имею, почему я не сталкивался с этой проблемой раньше, я часто использовал такие цвета. Почему он обрабатывает это по-другому, и я могу заставить его интерпретировать его как обычный цвет?

EDIT: Код такой: [self setLineColor: [NSColor colorWithCalibratedRed: зеленый: синий: альфа]; по моему проснулся от ниб. Я также обнаружил, что это альфа-значение, отличное от 1, которое определяет цвет "NSCalibratedRGBColor". Альфа-значения 1, как и вспомогательные методы, приводят к тому, что в отладке определяется цвет "NSCachedRGBColor", который работает совершенно нормально.

Ответы [ 3 ]

2 голосов
/ 21 февраля 2009

Приложение продолжало аварийно завершать работу с ошибкой «[NSCFNumber set] нераспознанный селектор».

Это означает, что вы перевыпустили цвет, а затем другой объект (в данном случае NSNumber) был назначен тому же указателю. Затем вы отправили сообщение set объекту, который, по вашему мнению, был вашим цветом, но теперь это был объект NSNumber. Результат: эта ошибка. Это не имело никакого отношения к использованию вами калиброванного и некалиброванного цветового пространства.

Все цвета поддерживают один и тот же интерфейс NSColor. Классы цвета NS [snip], которые вы видите, являются частными подклассами NSColor; все они поддерживают все методы NSColor. Насколько вам известно, все они просто NSColors.

1 голос
/ 21 февраля 2009

Именованные цвета, такие как + [NSColor blueColor], являются одноэлементными объектами. Но + [NSColor colorWithCalibratedRed: ...] нет. Похоже, вы не правильно сохраняете цвет.

Обязательно прочитайте документацию по управлению памятью для сохранения / выпуска. Или просто переключитесь на сборку мусора.

0 голосов
/ 21 февраля 2009

Какая строка кода вызывала проблему?

NSCalibratedRGBColor работает не так, как некалиброванный цвет, в том смысле, что когда вы «устанавливаете» его, цвет будет калиброваться по цветовому пространству контекста, а не с использованием необработанного некалиброванного цвета.

Тем не менее, я никогда не видел этой ошибки при конкретном использовании методов NSColor, и без дополнительной информации я оставляю царапину на своей лысеющей головке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...