Cocoa Привязки в Xcode 4

Objective-c является обучаемым; Cocoa является обучаемым; Я считаю интерфейс Builder и его потомка Xcode 4 полностью непостижимым! Для ссылки на текст (как эквивалент исходного кода C или Obj-c) нет. Все описания все "перетащите сюда, подключите это, Ctl перетащите туда", и я остаюсь потерянным....

Я пытаюсь пройти различные примеры ключевых технологий Apple. Я прошел через Cocoa Bindings и пример файла в примере NSTableViewBinding в разработчике Apple. Чтобы попытаться понять это, я пытался его воспроизвести.

Обратимся теперь к комментариям в верхней части метода awakeFromNib в файле MyWindowController.m Как мне сделать эти подключения в Xcode 4???

enter image description here

  • Object, называемый TableArray, не существует ни в библиотеке Объекта, ни в исходном коде; где это происходит?

  • Referencing Bindings справа; как они созданы?

  • Различные пары "ключ/значение", упомянутые в верхней части метода awakeFromNib; как они созданы?

Я знаю, что Xcode 4 должен быть более простым улучшением, но меня очень смущает замена IB. Все материалы IB в Интернете относятся к совершенно другим более ранним версиям, поэтому я не могу найти много способов помочь.

Последующий

Мне удалось выяснить Cocoa Bindings в Xcode 4. Я смог дублировать функциональность примера программы в нескольких строках кода.

Вот что мне понадобилось, чтобы выяснить:

  • TableArray - это Array Controller Object перетаскивается из библиотеки объектов в список объектов в XIB и затем переименовывается. (Примечание для Apple: класс базового объекта был бы приятным в представлении HUD правой кнопки мыши)

  • Ответ Стивена Полетто был бесценным руководством по подключению всего этого.

  • Мне сразу не показалось, как работает интерфейс подключения в правой клавише HUD: figure 2

  • Массив хранения myContentArray неявна в создании Array Controller Object

  • Нажмите и перетащите из HUD таблицыArray в определение AppDelegate в файле .h, чтобы создать там соединение.

Ответы

Ответ 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, устранение привязок будет проще. Вот руководство, чтобы помочь.

Ответ 2

Компонент встроенного интерфейса построителя Xcode 4 не отличается от старого конструктора интерфейсов в отношении основных понятий.

Загрузите XCode 3, который по-прежнему доступен на веб-сайте Apple, и следуйте инструкциям, доступным в Интернете.

Или кто-нибудь более полезный, чем я в SO, может написать хороший учебник, используя Xcode 4...

Итак, позвольте мне попытаться объяснить вам несколько вещей. (Но я действительно рекомендую использовать Xcode 3 для вас в данный момент.Я не говорю, что Xcode 3 по своей сути лучше, я просто говорю, что Xcode 3 имеет больше учебников, чтобы вы могли легко получить концепцию, которая может быть используется с Xcode 4.)

  • Файл nib/xib содержит в нем архивные объекты. В построителе интерфейса (независимо от того, является ли он автономным или унифицированным в Xcode) создается файл nib/xib, создавая живые объекты, которые затем замораживаются в архивные объекты при сохранении файла. TableArray - это экземпляр, созданный внутри файла nib. Вы можете перетащить общий объект из библиотеки объектов в наконечник и изменить его класс на все, что хотите. То, как создается объект.

  • Вы не создаете привязки ссылок. Связывание имеет направление от объекта A к другому объекту B. Вы устанавливаете привязки со стороны A (в данном случае, NSTableColumn). Ссылка на привязки просто показывает эту информацию на стороне B. Итак, выберите столбцы представления таблицы в IB и установите там привязки.

  • Это сделано на панели привязки NSTableColumn.