Как эти классы действительно взаимодействуют?
Рассмотрим традиционный способ использования TableView или OutlineView (на любом языке). Обычно вы реализуете интерфейс источника данных, который будет предоставлять данные для представления. Эта реализация источника данных по сути является «контроллером», который переводит вашу модель данных в табличное представление; и он также может обрабатывать выбор строки, вставку, удаление, сортировку, фильтрацию и т. д.
Теперь предположим, что в вашем приложении есть несколько различных TableView, каждый со своей реализацией источника данных. Вы обнаружите, что каждая реализация источника данных начинает выглядеть одинаково; вы сможете повторно использовать большой объем кода между вашими источниками данных, поскольку при условии, что они работают с одинаковыми или похожими моделями данных, код для сортировки и т. д. также одинаков.
Вот что такое NSArrayController: универсальный контроллер TableView / источник данных. Он обрабатывает выбор строк, вставку, удаление, сортировку, фильтрацию и т. Д., Тем самым избавляя вас от необходимости писать кучу шаблонного кода.
Является ли источник данных NSTableView экземпляром NSArrayController?
Нет, привязки данных заменяют традиционный интерфейс источника данных; поэтому NSTableView подключается к контроллеру массива с помощью привязок данных.
Например, вы бы связали столбец табличного представления со свойством вашей модели:
myArrayController.arrangedObjects.firstName
где arrangedObjects
- это свойство NSArrayController, а firstName
- это свойство вашей модели.
Должен ли делегат и источник данных быть одним и тем же классом в NSTableView или NSOutlineView?
При использовании привязок данных вы не устанавливаете источник данных NSTableView. Вы по-прежнему можете предоставить делегат NSTableView для настройки внешнего вида и поведения представления. NSArrayController не является делегатом NSTableView.
Если привязки данных не используются, вы должны реализовать источник данных. Часто источник данных и делегат - это один и тот же объект.