Инициализация NSView: -init: vs. -awakeFromNib: - PullRequest
7 голосов
/ 21 марта 2011

У меня есть простой класс MyView, унаследованный от NSView и переменная экземпляра NSImage * image;. Функциональность класса заключается в рисовании изображения на виде.

Однако в -drawRect: экземпляр изображения всегда равен nil, если он был инициализирован в функции -init:, а не nil, если он был инициализирован в -awakeFromNib:. Журнал показывает, что функции -init: и -awakeFromNib: вызываются только один раз.

-awakeFromNib: реинициализирует компонент GUI по умолчанию?

1 Ответ

9 голосов
/ 21 марта 2011

Нет. Для awakeFromNib реализации по умолчанию нет.

Ваша проблема в том, что вы переопределяете неправильный метод инициализации. NSView ' обозначенный инициализатор равен initWithFrame:. Простой подкласс init никогда не вызывается, и поэтому ваш image ivar ни на что не указывает.

Вы можете инициализировать этот ивар в awakeFromNib или initWithFrame:. Это не имеет значения. Первый вызывается после второго и предоставляется как точка, куда вы можете вставить код инициализации, который должен взаимодействовать с другими объектами в вашем кончике (через ваш IBOutlets).

...