Как работают контроллеры окна
Объект контроллера (в этом случае, экземпляр NSWindowController
класс), управляет окном; этот объект обычно хранится в файле пера. Это управление влечет за собой следующее:
Загрузка и отображение окна
Закрытие окна в надлежащих случаях
Настройка заголовка окна
Хранение кадра окна (размер и расположение) в базе данных значений по умолчанию
Расположение каскадом окна в связи с другими окнами документа приложения
Контроллер окна может управлять окном отдельно или как участником основанной на документе архитектуры AppKit, также включающей NSDocument
и NSDocumentController
классы. В этой архитектуре контроллер окна создается и управляется документом (экземпляр NSDocument
подкласс), и, в свою очередь, сохраняет ссылку на документ. Для обсуждения этой архитектуры см. Основанное на документе Руководство по программированию Приложения для Mac.
Отношение между контроллером окна и файлом пера важно. Несмотря на то, что контроллер окна может управлять программно создаваемым окном, он обычно управляет окном в файле пера. Файл пера может содержать другие объекты верхнего уровня, включая другие окна, но ответственность контроллера окна является этим главным окном. Контроллер окна обычно является владельцем файла пера, даже когда это - часть основанного на документе приложения.
Для простых документов — т.е. документов только с одним файлом пера, содержащим окно — Вы должны сделать мало непосредственно с NSWindowController
объекты. AppKit создает один для Вас. Однако, если контроллер окна по умолчанию не достаточен, можно создать пользовательский подкласс NSWindowController
.
Для документов с многократными окнами или панелями, Ваш документ должен создать отдельные экземпляры NSWindowController
(или пользовательских подклассов NSWindowController
), один для каждого окна или панели. Примером является приложение CAD, имеющее различные окна для стороны, вершины и видов спереди рисованных объектов. Что Вы выполняете в Вашем NSDocument
подкласс определяет ли значение по умолчанию NSWindowController
возразите или отдельно создаваемый и сконфигурированный NSWindowController
объекты используются.
Поведение закрытия окна
Когда окно закрывается, и это - часть основанного на документе приложения, документ удаляет контроллер окна окна из своего списка контроллеров окна. Это приводит к системе, освобождающей контроллер окна и окно, и возможно NSDocument
возразите себе. Когда контроллер окна не является частью основанного на документе приложения, закрытие окна не делает результатом по умолчанию в освобождении контроллера окна или окна. Это - желаемое поведение для контроллера окна, управляющего чем-то как инспектор; Вам не придется загрузить файл пера снова и воссоздать объекты в следующий раз, когда пользователь запрашивает инспектора.
Если Вы хотите, чтобы закрытие окна сделало и контроллер окна и окна, уходят, когда это не часть документа, Ваш подкласс NSWindowController
может наблюдать NSWindowWillCloseNotification
уведомление или, как делегат окна, реализует windowWillClose:
метод.