NSWindow - это ноль после awakeFromNib - PullRequest
       23

NSWindow - это ноль после awakeFromNib

1 голос
/ 18 октября 2011

У меня есть nib-файл, в котором есть несколько видов и пользовательских объектов. Одним из таких объектов является пользовательский объект контроллера. В методе awakeFromNib я хочу получить доступ к окну, в котором хранятся все эти вещи. Я не уверен, как получить окно в этой точке. Однако этот пользовательский объект имеет выход для просмотра. Я знаю, что вы можете получить окно от вызова [nameOfView window], но по какой-то причине в этот момент возвращается nil для окна, даже если представление не nil. В какой момент окно будет ненулевым?

В качестве примечания: если я передам окно в качестве параметра этому пользовательскому объекту, который загружается из файла пера, нужно ли мне беспокоиться о его освобождении / сохранении? Как управление памятью будет работать с этим NSWindow в моем объекте, который был загружен с пера?

1 Ответ

2 голосов
/ 18 октября 2011

Если я правильно вас понял, вы не сможете сделать это во время процесса загрузки пера:

  1. Какой-то контроллер (назовем его главным контроллером) запускает загрузку этого файла пера;
  2. awakeFromNib отправляется объектам внутри этого nib-файла, включая ваш пользовательский объект контроллера;
  3. Главный контроллер получает ссылку на nameOfView (возможно, через пользовательский контроллер) идобавляет его в иерархию представлений окна.

Загрузка файла пера, содержащего представления, автоматически не добавляет эти представления в иерархию представлений окна, поэтому [nameOfView window] возвращает nilреализация вашего пользовательского контроллера awakeFromNib.Поскольку на шаге 1 есть главный контроллер, который отвечает за запуск загрузки этого nib-файла, я предполагаю, что этот главный контроллер является тем, который отвечает за добавление представлений в окно.Когда это произойдет, попросите главный контроллер отправить сообщение настраиваемому контроллеру, чтобы ваш настраиваемый контроллер знал, когда nameOfView было добавлено в окно.

...