Перемещение этого кода на -windowDidLoad
обычно является безопасной ставкой, оно вызывается после того, как окно полностью загружено, по сравнению с -awakeFromNib
, где вы можете столкнуться с проблемами, потому что порядок, в котором он вызывается для всех объектов в вашем кончике не определено.
В общем, неплохо бы запомнить все инициализируемые вами инициализации, каким частям необходим пользовательский интерфейс для правильной работы, какие части можно отложить до тех пор, пока пользователь не выполнит действие, и так далее. Например, хорошо откладывать такие задачи, как выборка основных данных, до последней минуты, если у вас когда-нибудь будет окно, которое не открывается, пока пользователь не запросит его. С другой стороны, иногда вы будете работать с таким объектом, как контурное представление, для которого необходимо предварительно заполнить источник данных, чтобы методы постоянства работали.
Как только вы знаете, что делаете и в каком порядке это нужно сделать, вы можете выбрать некоторую комбинацию init, awakeFromNib, yyyWillLoad или xxxDidLoad, и вы позаботитесь о многих подобных ошибках, прежде чем они есть шанс вызвать неприятности.