2009-05-12 1 views
1

Возможно, я не использовал IBOutlet правильно или какую-то еще тонкость работы NIB-файлов, вызывающих у меня проблемы - любая помощь будет высоко оценена (не стесняйтесь предлагать альтернативный способ выполнения Я хочу).IBOutlet не устанавливается в проекте MVC Cocoa

У меня есть объект View и объект Controller. Оба находятся в NIB. Инициализация контроллера также вызывается при загрузке NIB и инициализации представления в обратном вызове «awakeFromNib». Мне нужен способ подключения этих двух объектов - в частности, включить объект «Вид» для вызова функций на контроллере.

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

IBOutlet Controller* _controller; 

в интерфейсе просмотра и графический подключил его к объекту контроллера в Interface Builder, делая соединение с вида на контроллер и назначая выход _controller к контроллеру (синяя Generic коробки объекта в Interface Builder).

Во время выполнения, _controller всегда _nil. Я проверил, что инициализация контроллера была действительно вызвана.

Есть ли что-то очевидное, что мне не хватает об этом? Простой способ подключения этих двух? Поскольку они оба созданы NIB, у меня нет общего объекта, который имеет указатель на оба.

+0

Какой объект является владельцем ниба? –

ответ

0

Попытайтесь получить доступ к IBOutlet в viewDidLoad instad.

Когда awakeFromNib называется не все IBOutlets заполнены (хотя документация, похоже, подразумевает его).

+0

Я не пытаюсь использовать его в awakeFromNib ... Я использую его намного позже, когда щелчок по меню приводит к выполнению некоторого кода в объекте View. Есть некоторые refcounting foo Мне нужно беспокоиться? – 2009-05-12 22:11:52

+0

Кстати, я ожидаю, что после того, как IBOutlet установлен, он должен быть доступен, пока не будет проведена очистка .... Действительно ли это? – 2009-05-12 22:13:32

+1

Все IBOutlets * * устанавливаются ко времени awakeFromNib, если вы не установили их в банке. Если этого никогда не произойдет, то вы жужжаете несколько перьев и делаете это плохо, или (МНОГО менее вероятно) вы нашли ошибку. В последнем случае вы должны сообщить об этом (https://bugreport.apple.com/). –

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