Как работают контроллеры окна

Объект контроллера (в этом случае, экземпляр NSWindowController класс), управляет окном; этот объект обычно хранится в файле пера. Это управление влечет за собой следующее:

Контроллер окна может управлять окном отдельно или как участником основанной на документе архитектуры AppKit, также включающей NSDocument и NSDocumentController классы. В этой архитектуре контроллер окна создается и управляется документом (экземпляр NSDocument подкласс), и, в свою очередь, сохраняет ссылку на документ. Для обсуждения этой архитектуры см. Основанное на документе Руководство по программированию Приложения для Mac.

Отношение между контроллером окна и файлом пера важно. Несмотря на то, что контроллер окна может управлять программно создаваемым окном, он обычно управляет окном в файле пера. Файл пера может содержать другие объекты верхнего уровня, включая другие окна, но ответственность контроллера окна является этим главным окном. Контроллер окна обычно является владельцем файла пера, даже когда это - часть основанного на документе приложения.

Для простых документов — т.е. документов только с одним файлом пера, содержащим окно — Вы должны сделать мало непосредственно с NSWindowController объекты. AppKit создает один для Вас. Однако, если контроллер окна по умолчанию не достаточен, можно создать пользовательский подкласс NSWindowController.

Для документов с многократными окнами или панелями, Ваш документ должен создать отдельные экземпляры NSWindowController (или пользовательских подклассов NSWindowController), один для каждого окна или панели. Примером является приложение CAD, имеющее различные окна для стороны, вершины и видов спереди рисованных объектов. Что Вы выполняете в Вашем NSDocument подкласс определяет ли значение по умолчанию NSWindowController возразите или отдельно создаваемый и сконфигурированный NSWindowController объекты используются.

Поведение закрытия окна

Когда окно закрывается, и это - часть основанного на документе приложения, документ удаляет контроллер окна окна из своего списка контроллеров окна. Это приводит к системе, освобождающей контроллер окна и окно, и возможно NSDocument возразите себе. Когда контроллер окна не является частью основанного на документе приложения, закрытие окна не делает результатом по умолчанию в освобождении контроллера окна или окна. Это - желаемое поведение для контроллера окна, управляющего чем-то как инспектор; Вам не придется загрузить файл пера снова и воссоздать объекты в следующий раз, когда пользователь запрашивает инспектора.

Если Вы хотите, чтобы закрытие окна сделало и контроллер окна и окна, уходят, когда это не часть документа, Ваш подкласс NSWindowController может наблюдать NSWindowWillCloseNotification уведомление или, как делегат окна, реализует windowWillClose: метод.