2009-02-27 2 views
0

Когда я использую Interface Builder> Inspector> Bindings, чтобы установить привязку для одного из моих элементов представления (например, текстовое поле), тогда я должен указать объект, к которому привязан этот элемент представления.Какова задача объекта, к которому я привязываюсь?

Так что теперь мне интересно, что именно задание этого объекта я указываю в «Привязать к:»? Я предполагаю, что Interface Builder автоматически создает некоторые методы, которые делают все эти вещи синхронизации. Это правильно?

И что это значит, когда я «привязываюсь к: владельцу файла»? Это мой файл с основным методом внутри?

ответ

0

Объект, который вы связываете, должен быть key value coding и key value observing совместим. Bindings - это просто обертка, которая использует обе эти технологии таким образом, что приводит к значительно меньшему количеству кода.

Если вы действительно хотите знать, как это работает, есть an entry in Mike Ash's blog how KVO works..

Я не знаю, хотите ли вы получить много деталей. Предлагаю вам прочитать intro to bindings of cocoadevcentral.com. Это объясняет их довольно хорошую работу.

Для вашего конкретного вопроса о файле владелицей, Apple пишет:

Каждое приложение Какао имеет главный СИБ файл, который содержит специфичные для приложения меню и возможно одно или несколько окон. NSApp является владельцем файла основного файла nib . Когда приложение запускается, NSApp загружает основной файл nib, , отбрасывая его, и отображает меню и начальные окна.

+0

Нет, владелец файла обычно не является оконным контроллером. Если вы вызываете его напрямую, это может быть, но более полезно указать другой объект (обычно сам) как владельца. NSDocument выполняет именно это: документ владеет объектами nib. –

2

... что именно работа этого объекта указываю в «Привязка к:»?

Вы связываете свое мнение с контроллером. Контроллер владеет моделью; ключ контроллера, к которому вы привязываетесь, - это имя свойства, которое обслуживает часть этой модели. Объекты модели имеют свои собственные свойства, и вы можете (в некоторых случаях) предоставить путь ключа модели вместе с ключом контроллера.

Я предполагаю, что Interface Builder автоматически создает некоторые методы, которые делают все эти вещи синхронизации. Это правильно?

Nope. IB никогда не создает методов. Система Bindings выполняет всю эту синхронизацию, и она уже существует. IB просто вызывает его (в частности, он вызывает метод bind::::, о котором я упоминал в my answer to your other question).

И что это значит, когда я «привязываюсь к: владельцу файла»?

Владелец файла - это объект, которому принадлежат все объекты верхнего уровня в файле nib. Владельцем MainMenu nib является объект приложения (NSApp).В приложении на основе документа объект документа будет загружать нить, содержащую окно документа; как таковой, он является владельцем окна вместе с любыми другими объектами верхнего уровня в этом nib.

Это мой файл с основным методом внутри?

Нет такого файла, потому что такого метода нет. Существует функция main, но это функция, а не метод объекта. Там нет объекта, поэтому вы не можете привязываться к нему.

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

Если вы спрашиваете, какой файл принадлежит, это файл nib (или, точнее, его содержимое, но «Содержание файла« Владелец »немного длиннее).

* Ну, кроме символов отладки, которые идентифицируют имя файла и номер строки каждой инструкции.

+0

"(в частности, он вызывает метод bind ::::, о котором я упомянул в ответе на ваш другой вопрос)« ... Я не понимаю этот вызов метода связывания. Кто реализует этот метод, который называется? – Thanks

+0

Apple. Это часть протокола NSKeyValueBindingCreation, который входит в состав Application Kit. –