Какао: каково имя переменной экземпляра, созданного файлом NIB? - PullRequest
1 голос
/ 04 февраля 2010

Когда файл NIB Какао создает экземпляр объекта пользовательского контроллера, как называется переменная, которой назначен этот экземпляр пользовательского контроллера?

В случае, если это неясно, если вы вручную создали экземпляр этого класса, вы должны сделать:

MyControllerClass *myVar = [[MyControllerClass alloc] init];

Какой эквивалент «myVar» использовал NIB при этом за кулисами?

Ответы [ 5 ]

2 голосов
/ 04 февраля 2010

Реализуйте метод awakeFromNib в вашем классе контроллера - он вызывается сразу после завершения загрузки пера, и экземпляр вашего контроллера можно найти в переменной "self".

2 голосов
/ 04 февраля 2010

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

Когда вы помещаете объект в файл пера, он архивируется, а затем разархивируется во время выполнения.Если вы хотите иметь возможность получить ссылку на объект, который был заархивирован в файле пера, вам нужно использовать выход, что означает, что вы объявляете переменную экземпляра IBOutlet в классе, который присутствует в файле пера, изатем подключите эту розетку к объекту в наконечнике, на который вы хотите сослаться в Интерфейсном Разработчике.Переменные экземпляра отличаются от переменной стека, которую вы объявили в своем примере, и на них можно ссылаться во время выполнения.

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

Итак, чтобы уточнить, вам нужна ссылка на ваш объект в наконечнике из некоторыхдругой объект в том же перо.Этот второй объект объявляет розетку, используя ключевое слово IBOutlet для переменной экземпляра, например:

@interface SomeOtherObject : NSObject
{
    IBOutlet SomeObject* anObject;
}
@end

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

Затем вы можете ссылаться на свой экземпляр SomeObject по имени переменной * 1023.* внутри кода для SomeOtherObject.

0 голосов
/ 10 апреля 2010

Я думаю, что Nibbles смущен тем, что из кода можно ссылаться на переменную, определенную только в файле NIB.

ответ на этот вопрос, обычно у вас есть собственный класс контроллера (или класс делегата) A в коде и NIB, и если у вас есть другой класс или контроллер B, определенный только в NIB, просто установите выход в A, указывающий на B Поскольку A может использоваться в любом месте вашего кода, доступ к B также возможен через A.

У меня тоже был этот вопрос.

0 голосов
/ 04 февраля 2010

… как называется переменная, которой назначен этот пользовательский экземпляр контроллера?

Это имя, которое вы дали этой переменной, когда объявили.

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

(На самом деле вы можете создавать розетки из IB, и в современной среде исполнения это должно действительно создавать розетку, а не просто объявлять несуществующую розетку в кончике. Даже таким образом, you создайте розетку [в IB] и вы дадите ей имя.)

0 голосов
/ 04 февраля 2010

@ tedge (я не могу комментировать ваш ответ):

Не могли бы вы немного уточнить для начинающего ученика Какао?Возьмите учебник Apple Currency Converter.

Я реализую метод awakeFromNib в существующем классе ConverterController.(Что-то, чему я научусь в ближайшее время!)

Приложение запускается и автоматически создается экземпляр ConverterController.

Что awakeFromNib скажет мне об этом работающем экземпляре (кромеготов к использованию) - и какой синтаксис с «я» заставляет его разглашать эту информацию?

...