2009-10-15 5 views
1

Я только начал с привязок Cocoa, и я работаю над своим первым приложением.Связывание какао (владелец файла с делегатом приложения)

Многие образцы и книги используют NSArrayController, но поскольку я хочу привязать только один объект и его свойства к некоторым текстовым полям, я использовал NSObjectController. У меня также нет приложения на основе документов. Мое приложение представляет собой простое одно окно.

Я начинаю сталкиваться с проблемами, когда пытаюсь связать свой NSObjectController с владельцем файлов, как и все образцы. Если я это сделаю, я не могу скомпилировать приложение. Я всегда получаю «Этот класс не соответствует ключевому значению».
Но если я привяжу NSObjectController к экземпляру AppController моего приложения, он отлично работает. Мне также удалось связать текстовое поле с полем NSObjectController. Это также работает так, как должно.

Но я не знаю, поступаю ли я правильно. Все образцы, которые я нашел, связываются с владельцем файлов - что-то, что не работает для моего приложения. Связывание с Application Controller кажется идеальным способом для приложения, не основанного на документах.

ответ

3

Когда вы связываете привязку NSObjectControllercontentObject, то, что вы делаете, сообщает контроллеру, как найти объект, который вы хотите изменить. Это делается с использованием Key-Value Coding, где используется строка для перемещения по потенциально многим отношениям объектов для определения значения. Во время выполнения контроллер объекта вызовет [object valueForKeyPath:keyPath], используя объект, к которому вы привязали контроллер, и путь ключа, который вы указали в Interface Builder.

Выход владельца файла в Interface Builder относится к объекту, указанному как owner при загрузке NIB. В приложении на основе документов это обычно NSWindowController. В приложении без документа владелец файла обычно является экземпляром NSApplication. Но вы не сделали (и не должны) подкласс NSApplication, поэтому в вашем приложении Владелец файла не подходит для поиска объекта.

Вместо этого вы скорее всего добавили объект в свой делегат приложения, поэтому имеет смысл связать контроллер объекта с делегатом приложения в приложении, не основанном на документах. В качестве предложения я вернусь к предыдущим примерам, над которыми вы работали, и посмотрите, можете ли вы понять, как эти объектные контроллеры находят свой объект контента. Как только вы увидите соединение между контроллером объекта и объектом, которым он управляет, привязки должны сделать для вас намного больше смысла.

0

Вы хотите привязать объект ObjectController к объекту. Если вы работаете с не-документовым приложением с одним наконечником, то владелец файла будет экземпляром NSApplication.

Не думайте о привязке к владельцу файла как о чем-то особенном, это только место для владельца объекта nib - вы можете увидеть это в инспекторе файла nib. Привязать к любому объекту.

 Смежные вопросы

  • Нет связанных вопросов^_^