Жизненный цикл предпочтительной области

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

Предпочтительные области могут использоваться в других приложениях также. Например, Ассистент Установки Mac OS X встраивает предпочтительную область Даты и Времени в одно из ее окон.

Всюду по этому описанию мы обратимся к приложению-контейнеру, ли это быть Установками системы, Ассистентом Установки или Вашим собственным предпочтительным приложением, как просто “приложение”.

Инстанцирование предпочтительного объекта области

Когда приложение инстанцирует, жизнь предпочтительной области начинается NSBundle объект для предпочтения разделяет пакет на области. Приложение тогда спрашивает NSBundle для его принципиального класса и создает экземпляр принципиального класса с помощью initWithBundle: метод, передающий в NSBundle возразите как параметр.

initWithBundle: метод является определяемым инициализатором для NSPreferencePane класс. Подклассы NSPreferencePane то желание выполнить их собственную инициализацию должно переопределить initWithBundle: метод, заботясь для вызова реализации суперкласса сначала. Например:

- (id)initWithBundle:(NSBundle *)bundle
{
    if ( ( self = [super initWithBundle:bundle] ) != nil )
    {
        // add subclass-specific initialization here
    }
    return self;
}

В этой точке элементы пользовательского интерфейса предпочтительной области (ее основной файл пера и ее основное представление) не были загружены или инициализированы. Любой инициализации, зависящей от соединений розетки к элементам пользовательского интерфейса в основном файле пера, нужно подчиниться mainViewDidLoad метод, описанный ниже.

Если Ваша предпочтительная область поддерживает команды AppleScript, она должна быть подготовлена реагировать на них в этой точке.

Загрузка основного представления

Когда предпочтительный пользовательский интерфейс области должен быть выведен на экран впервые, приложение отправляет loadMainView обменивайтесь сообщениями к предпочтительному объекту области. Реализация по умолчанию loadMainView выполняет следующие действия:

  1. Решает, что имя основного файла пера путем вызова предпочтения разделяет объект на области mainNibName метод.

  2. Загрузки, что файл пера, передающий в предпочтении, разделяет объект на области как владельца файла пера.

  3. Вызывает предпочтительный объект области assignMainView метод, чтобы найти и присвоить основное представление.

  4. Вызывает предпочтительный объект области mainViewDidLoad метод.

  5. Возвращает основное представление.

Последовательность методов, вызванных при загрузке основного представления, проиллюстрирована на рисунке 1.

  Поток Выполнения рисунка 1 loadMainView
Execution flow of loadMainView

Предпочтительный подкласс области должен редко должен быть переопределить loadMainView метод. Один случай, в котором переопределение необходимо, - то, если предпочтительный подкласс области должен использовать базируемый метод не пера для загрузки основного представления, такого как программно создание основного представления. В этом случае, реализация подкласса loadMainView должен вызвать setMainView: передача в основном представлении как параметр. Это гарантирует этому будущие вызовы к mainView возвратит корректное представление.

Динамично выбирая основной файл пера

Реализация по умолчанию mainNibName возвращает значение NSMainNibFile введите список свойств пакета. Если ключ не существует, значение по умолчанию @“Main” возвращается. Подкласс NSPreferencePane может переопределить mainNibName метод, если это должно динамично выбрать основной файл пера для использования.

Присвоение основного представления

Реализация по умолчанию loadMainView вызывает assignMainView метод, чтобы найти и присвоить основное представление в основном файле пера. Реализация по умолчанию assignMainView присваивает представление содержания _window к _mainView выход и сохраняет представление. Это тогда удаляет довольное представление из _window, выпуски _window, и наборы _window к nil.

Большинство предпочтительных областей не должно должно быть переопределять assignMainView метод. Реализация по умолчанию assignMainView позволяет предпочтительному разработчику области создавать пользовательский интерфейс для предпочтительной области в окне и соединяться _window выход к окну. Если предпочтительная область имеет многократные основные представления и потребности выбрать, какое основное представление использовать во время выполнения, она может переопределить assignMainView метод.

Установка пользовательского интерфейса

Предпочтительный объект области получает a mainViewDidLoad сообщение после его основного файла пера было загружено, и основное представление было присвоено. Реализация по умолчанию mainViewDidLoad в NSPreferencePane класс ничего не делает. Подкласс NSPreferencePane может переопределить этот метод, если это должно инициализировать состояние графических элементов представления.

Выбор

Прежде чем основное представление области предпочтения выведено на экран в окне приложения, приложение отправляет, предпочтительная область возражают a willSelect сообщение. Сразу после того, как представление выведено на экран, приложение отправляет предпочтительную область a didSelect сообщение.

Реализации по умолчанию этих методов ничего не делают. Подкласс NSPreferencePane должен переопределить эти методы, если он должен выполнить некоторое действие или сразу прежде или сразу после того, как выбрана предпочтительная область.

Отмена выбора

Когда одно из следующих действий происходит, приложение пытается отменить выбор в настоящее время выбираемой предпочтительной области:

Приложение пытается отменить выбор предпочтительной области путем отправки его shouldUnselect сообщение. Метод возвращает одно из значений от Таблицы 1, указывая, готова ли предпочтительная область быть невыбранной. Реализация по умолчанию shouldUnselect в возвратах класса NSPreferencePane NSUnselectNow. Это говорит приложению, что нормально отменять выбор предпочтительной области сразу.

Табличные 1  Возвращаемые значения shouldUnselect

NSUnselectCancel

Отмените отмену выбора

NSUnselectNow

Продолжайте отмену выбора

NSUnselectLater

Задержите отмену выбора, пока предпочтительная область не вызовет replyToShouldUnselect:

Предпочтительная область может переопределить shouldUnselect метод, если это должно отменить или задержать отмену выбора. Если предпочтительная область должна подтвердить изменения сохранения с пользователем (как с Сетевой предпочтительной областью), Как правило, это происходит. Если механизм подтверждения отмены выбора синхронен (такой как с модальным приложением предупреждением или листом), shouldUnselect метод должен выполнить синхронный вызов и затем возвратиться NSUnselectCancel или NSUnselectNow. Например:

- (NSPreferencePaneUnselectReply)shouldUnselect
{
    int result = NSRunAlertPanel( ... );
 
    if ( result == NSAlertDefaultReturn )
        return NSUnselectNow;
    return NSUnselectCancel;
}

Если механизм подтверждения отмены выбора является асинхронным (такой как с модальным окном листом), shouldUnselect метод должен возвратиться NSUnselectLater. Когда возвращается область NSUnselectLater, это должно вызвать replyToShouldUnselect: как только область решает, может ли она быть невыбранной. replyToShouldUnselect: метод берет один параметр, булево значение, указывающее, должно ли приложение отменить выбор области. Значение YES означает, что приложение должно отменить выбор области. Значение NO означает, что приложение должно отменить отмену выбора.

Как только отмена выбора подтверждена, приложение отправляет предпочтительную область a willUnselect обменивайтесь сообщениями сразу, прежде чем действие, вызывающее отмену выбора, выполняется. Приложение отправляет предпочтительную область a didUnselect обменивайтесь сообщениями сразу после того, как действие, вызвавшее отмену выбора, выполняется. При выходе из приложения, willUnselect и didUnselect сообщения оба отправляются перед выходами приложения.

Долговечность предпочтительных объектов области в установках системы

По причинам производительности приложение Установок системы имеет в наличии предпочтительные объекты области, как только они инстанцировали. Когда предпочтительная область невыбранная, они не освобождены. Когда приложение Установок системы завершается, они только освобождены.