Инициализация объекта Cocoa Interface Builder - PullRequest
4 голосов
/ 15 января 2011

Основываясь на документации и образце кода, через который я прошел, у меня сложилось впечатление, что когда класс, определенный в xcode, считывается и настраивается в Interface Builder, объект, основанный на классе, эффективно создается и сохраняется в xib. или файл пера. Таким образом, объект готов к использованию при запуске соответствующего приложения.

В качестве альтернативы, для классов, которые не были обработаны Интерфейсным Разработчиком, код, такой как "новые" операторы, должен быть явно написан в xcode для создания и использования связанных объектов.

Было бы очень хорошо, если бы люди, которые были более осведомлены, чем я, подтвердили или исправили мое очень наивное понимание Интерфейсного Разработчика ...

Ответы [ 2 ]

6 голосов
/ 15 января 2011

Ваше понимание правильное, но неполное. Да, Interface Builder создает экземпляры классов и сериализует их в NIB. Однако эти объекты не будут автоматически доступны для вашего кода.

Для каждого объекта IB, к которому вы хотите получить доступ через XCode, вам необходимо объявить переменную IBOutlet. Пример:

IBOutlet NSWindow* mainWindow;  // A Reference to your main window

Поместите этот код в файл заголовка настраиваемого объекта, который вы создаете с помощью Interface Builder (перетащите универсальный объект в свой список классов, затем на вкладке «Удостоверение» инспектора установите настраиваемый объект как экземпляр вашего класса). ). Затем щелкните правой кнопкой мыши на вашем пользовательском объекте в Интерфейсном Разработчике. Вы должны увидеть запись для своего IBOutlet в появившемся окне. Перетащите из маленького кружка рядом с ним (в этом примере) ваше главное окно. Теперь у вас есть ссылка на объект IB в Xcode.

Именно через эти соединения (с IBOutlets для ссылок и IBActions для методов) вы определяете большую часть поведения вашего приложения.

1 голос
/ 15 января 2011

Nib-файлы содержат архивную копию графа объектов;все, что нужно знать NSNib или NSBundle, чтобы создавать новые экземпляры всех объектов, хранящихся в файле пера, соединенных вместе, как описано в привязках пера, и с их свойствами, установленными в значения, указанные в пате.

Полный процесс описан в Процесс загрузки объекта

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

Например, я мог бы создать перо, у которого «Владелец файла» - UIViewController, который связывает один объект UIView со свойством «Представления» владельца файла.Затем я мог бы иметь два разных подкласса UIViewController (или два экземпляра одного и того же подкласса UIViewController) загрузить один и тот же файл пера для каждого, чтобы получить свою собственную копию UIView.Точно так же я мог бы загружать новый UITableViewCell из пера каждый раз, когда мне нужна новая ячейка для таблицы.

...