Ответ 1
Чтобы установить привязки, описанные в комментариях awakeFromNib:
- TableArray - это NSArrayController. В крайнем левом углу документа Interface Builder вы увидите схему, отображающую все объекты, содержащиеся в вашем nib. Когда этот наконечник загружается во время выполнения, все объекты будут распакованы и созданы. На приведенном скриншоте вы увидите, что NSArrayController с именем "TableArray" уже существует. Если вам по какой-то причине необходимо создать другую, вы перетащите NSArrayController из библиотеки объектов (справа внизу) в документ Interface Builder.
- Выберите столбец таблицы "Фамилия" в Interface Builder. Вы можете сделать это, нажав треугольники раскрытия в виде контура, пока не увидите "Столбец таблицы - Фамилия", или выбрав его непосредственно в области основного холста IB. Инспекторы (с правой стороны окна Xcode) теперь будут отражать подробности о столбце имени, так как это текущий выбранный объект. Выберите инспектор привязок. Вы можете навешивать значки в верхней части инспектора, пока не найдете тот, который помечен как "Show the Insinding Inspector" - он второй справа. Инспектор привязок представляет вам список всех открытых привязок для выбранной NSTableColumn. Вы увидите, что "Значение" является одним из таких привязок - и что привязка мы хотим установить в соответствии с MyWindowController.m. Разверните треугольник раскрытия рядом со значением "Значение", чтобы показать все детали привязки.
- Теперь вы можете указать контроллер, с помощью которого вы хотите установить пути привязки и пути к контроллеру/модели. Перейдите и установите флажок "Bind" и выберите "TableArray" из всплывающей кнопки "Bind to:". Затем укажите "builtObjects" в качестве ключа контроллера и "firstname" в качестве пути ключа модели.
- Вы заметите, что ввод "firstname" заставил Xcode помещать серый предупреждающий значок с помощью всплывающей подсказки "Xcode не может решить введенный путь ключа". Xcode попытается разрешить введенную вами ключевую траекторию. Поэтому, если вы привязывались к NSArrayController, содержащему объекты класса Person, а класс Person определял свойство, называемое "адресом", "assemblyObjects.address" разрешалось бы соответствующим образом, и Xcode корректно проверял ваш путь к ключам. Но в этом примере контроллер массива управляет объектами NSDictionary, и нет никакой возможности для Xcode знать, какие пары ключ/значение вы храните в этих словарях. Вы, разработчик, должны знать, что словари, хранящиеся в NSArrayController, действительно содержат пару "firstname" /value, поэтому вы можете игнорировать это предупреждение.
- Повторите для других привязок, перечисленных в верхней части MyWindowController.m.
Раздел привязки ссылок в инспекторе соединений показывает все привязки, которые уже были установлены с помощью выбранного контроллера. Поэтому, если вы выберете TableArray и перейдете к инспектору соединений, теперь вы увидите "assemblyObjects.firstName" → Value, Table Column - First Name. Это показывает вам обязательство, которое вы только что создали выше.
Перед тем, как погрузиться в более продвинутую тему, например, Cocoa Bindings, может быть полезно получить удобную работу с Interface Builder. Используйте его для создания соединений IBOutlet и IBAction, как внутри IB, так и между IB и исходным кодом. Привыкнуть к использованию инспекторов для изменения атрибутов объектов пользовательского интерфейса и т.д. После того, как вам будет удобно работать с общим документооборотом IB, устранение привязок будет проще. Вот руководство, чтобы помочь.