Привязка объектов NSXML к пользовательскому интерфейсу

Экземпляры всех классов NSXML являются объектами модели, соответствующими протоколу кодирования значения ключа и уведомляющими наблюдателей, соответствующих протоколу наблюдения значения ключа любого изменения в их атрибутах. Следовательно, можно установить привязку между объектами NSXML и объектами в пользовательском интерфейсе с помощью технологии привязки Какао. С привязкой изменение в значении атрибута объекта NSXML распространено автоматически к свойству пользовательского интерфейса (такому как строковое значение текстового поля), и наоборот. Вместо пользовательского контроллера, содержащего стопки “кода связующего звена” для посредничества между моделью и объектами представления Вашего приложения, в Интерфейсном Разработчике, можно связать атрибуты модели со свойствами пользовательского интерфейса через готовые контроллеры.

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

Интерфейс

Кроме того давайте посмотрим всего на одну часть пользовательского интерфейса для приложения XMLBrowser. Когда по вкладке Editor щелкают, рисунок 1 показывает область, сделанную видимой; это также показывает Элементы sub область той области.

Рисунок 1  область Editor приложения XMLBrowser (Элемент sub область)
The Editor pane of the XMLBrowser application (Element subpane)

Текущий узел, имя которого показано чуть выше самого большого табличного представления, является окончательной контрольной точкой для всего остального на окне. Сначала, текущий узел является объектом NSXMLDocument представление всего документа. Любые дочерние элементы текущего узла выведены на экран в большом табличном представлении; первоначально, это - корневой элемент. При выборе дочернего узла в табличном представлении текстовое поле наверху окна выводит на экран свое записанное нотами XPath расположение в дереве, и текстовое представление в нижнем левом квадранте окна выводит на экран свое строковое представление XML. Если выбранный дочерний элемент является узлом элемента с атрибутами или пространствами имен, отображения приложения их в табличных представлениях Пространств имен и Атрибутах.

При нажатии “>” кнопка, в то время как дочерний узел выбран, выбранный узел становится текущим узлом, и остальная часть окна обновляется для отражения этого. Дочерние элементы нового текущего узла выведены на экран в большом табличном представлении с первым дочерним элементом, автоматически выбранным. Текстовое поле XPath и XML-строковое текстовое содержание изменения представления соответственно, и любые атрибуты или пространства имен нового дочернего элемента появляются в их соответствующих табличных представлениях. Для возвращения иерархии, таким образом сбрасывая текущий узел к его родителю, Вы нажимаете “<“кнопка.

Подключение контроллеров и объектов NSXMLNode

Объектная модель для привязки, используемой в окне, показанном на рисунке 1), довольно просто:

Конфигурация объектов NSXML и объектов контроллера в приложении отражает эту объектную модель. Четыре стандартных объекта контроллера добавляются к файлу пера NSXMLBrowser для этого окна:

Рисунок 2 изображает соединения среди этих экземпляров контроллера и контроллера пользовательского приложения, который называют AppController. (XMLNamespacesController опущен, потому что его конфигурация почти идентична тому из XMLAttributesController.)

Рисунок 2  , Как сконфигурированы объекты контроллера
How the controller objects are configured

В частности конфигурация привязки между контроллерами и объектами модели NSXML состоит из следующих шагов:

  1. Соедините выход содержания экземпляра XMLNodeController к контроллеру приложения (AppController).

  2. Установите ключи XMLNodeController как показано:

    content outlet of XMLNodeController

    Первая часть каждого ключевого пути идентифицирует current атрибут AppController и второй части идентифицирует атрибут текущего объекта NSXMLNode.

  3. Установите ключи XMLNodeArrayController, чтобы быть атрибутами класса NSXMLNode:

    keys of NSXMLNodeArrayController

    Обратите внимание на то, что класс объекта в этом случае указан как NSXMLNode.

  4. Установите привязку между contentArray свойство XMLNodeArrayController и current.children атрибут, к которому получает доступ XMLNodeController через selection ключ.

    binding between contentArray and XLNodeArrayController
  5. В области Attributes для XMLAttributesController, набор name и stringValue ключи для атрибутов XML.

    Atrributes pane
  6. В области Bindings для XMLAttributesController установите привязку между contentArray свойство контроллера и attributes атрибут, к которому получает доступ XMLNodeArrayController через selection ключ.

    Bindings pane
  7. Повторите последние два шага для XMLNamespacesController, заняв место namespaces для attributes для ключевого пути модели.

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

Как только Вы создали ассоциации между объектами NSXMLNode модели и контроллерами приложения XMLBrowser, можно установить привязку между объектами в пользовательском интерфейсе и их контроллерах, следовательно расширив привязку до связанных объектов модели. Чтобы сделать это, выберите объект пользовательского интерфейса и найдите требуемое свойство привязки в области Bindings окна Info. Для объектов пользовательского интерфейса, показывающих единственные значения, такие как текстовые поля и столбцы таблицы, обычно называют это свойство value или data. Для объектов, показывающих массивы данных, такие как табличные представления, свойства называют (в этом случае) contentArray и selectionIndexes. В то время как для контроллеров их данные появляются в “категории” Содержания Контроллера, для объектов пользовательского интерфейса обязательные ключи появляются в категории «Значения» привязки.

Разверните представление для связанного с содержанием свойства привязки объекта пользовательского интерфейса. Тогда укажите контроллер для установления привязки с, ключ контроллера для использования для привязки и ключевого пути к атрибуту модели. Например, привязка для поля XPath в области Editor XMLBrowser появляется как на рисунке 3.

  Привязка рисунка 3 для текстового поля, выводящего на экран расположение XPath выбранного дочернего элемента
Bindings for the text field displaying the selected child’s XPath location

Таблица 1 перечисляет привязку для большинства объектов пользовательского интерфейса в этой части приложения XMLBrowser.

Табличная 1  привязка Пользовательского интерфейса в области Editor (Элемент sub область)

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

Привязка

Контроллер

Ключ контроллера

Ключевой путь модели

Текстовое поле XPath

значение

XMLNodeArrayController

выбор

XPath

Текущий узел («Текущий»:)

значение

XMLNodeController

выбор

current.name

Дочернее табличное представление узлов

содержание

XMLNodeArrayController

arrangedObjects

Дочернее табличное представление узлов

selectionIndexes

XMLNodeArrayController

selectionIndexs

Столбец индекса

значение

XMLNodeArrayController

arrangedObjects

индекс

Добрый столбец

значение

XMLNodeArrayController

arrangedObjects (см. примечание),

вид

Столбец Name

значение

XMLNodeArrayController

arrangedObjects

имя

Столбец Level

значение

XMLNodeArrayController

arrangedObjects

уровень

Столбец Children

значение

XMLNodeArrayController

arrangedObjects (см. примечание),

дочерние элементы

Столбец значений

значение

XMLNodeArrayController

arrangedObjects

stringValue

Текстовое представление XML

данные

XMLNodeArrayController

выбор

XMLData

Представление таблицы атрибутов

содержание

XMLAttributesController

Представление таблицы атрибутов

selectionIndexes

NSXMLAttributesController

Столбец названия атрибута

значение

NSXMLAttributesController

arrangedObjects

имя

Значение названия атрибута

значение

XMLAttributesController

arrangedObjects

stringValue

«Содержание», привязывающее табличные представления, является дополнительным и создается автоматически при привязке столбца таблицы.