awakeFromNib дважды вызывали для моего WindowController, это правильно?

Мне сказали, что awakeFromNib следует вызывать только один раз, поэтому я был очень удивлен, увидев, что он вызывался дважды для моего WindowController. Я использую IB для создания моего WindowController в MainMenu.xib, но чтобы сообщить ему, какой файл xib окна загрузить, я добавил к нему метод init.

Когда я отлаживаю код, я нахожу первый вызов awakeFromNib, запускаемый этим стеком вызовов. Так что в основном [MyWindowController init] инициировал первый вызов. Тогда второй вызов, я думаю, был из-за загрузки MainMenu.xib. Это верно?

Может кто-нибудь пролить свет на это?

Кстати, я прочитал некоторые другие вопросы, похожие на мои, по переполнению стека, и в некоторых ответах было сказано, что это может быть связано с проблемой файла. Поэтому я особенно меняю владельца файла xib-файла окна на NSApplication. Но awakeFromNib по-прежнему вызывался дважды для MyWindowController.

1 ответ

Решение

Из вашего вопроса я понимаю, что вы создаете экземпляр MyWindowController в IB, а затем в init MyWindowControllers вы загружаете второй кончик с initWithWindowNibName:? Если это так, вы, естественно, получите два вызова awakeFromNib. Один при загрузке NIB, указанного в вашем методе init, другой при загрузке MainMenu.xib.

Другие вопросы по тегам