Связывающие действия работают. Подключение розеток не - PullRequest
1 голос
/ 19 марта 2012

У меня есть файл XIB с моими элементами управления, загруженный в Интерфейсный Разработчик (Xcode 4.0.2 на Snow Leopard).

Владелец файла установлен, скажем, на someClassController class, и я также добавил (в Интерфейсном Разработчике) экземпляр NSObject someClass.

Мне удалось связать, например, кнопку с действием в someClassController или someClass - иэто работает для них обоих.

Однако , всякий раз, когда я связываю выход с ЛЮБЫМ из них, он не обнаруживается;и NSLog сообщает NULL указатели.

  • Подсказка: Моя проблема здесь может быть намного сложнее, чем кажется, так как мои классы someClass и someClassController наследуютдругие классы, которые наследуют другие классы и т. д. (я имею дело с огромной хаотической кодовой базой, и я действительно не знаю, что еще может быть полезным для публикации) ... Однако я все еще хотел бы услышатьВаше мнение о том, что может пойти не так в таком случае ...

Ответы [ 2 ]

3 голосов
/ 19 марта 2012

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

Чтобы исследовать это, добавьте операторы в метод (ы) инициализатора объекта и, возможно, awakeFromNib, чтобы зарегистрировать значение self.

Некоторые (или все, или ни один) из объектов могут быть созданы в перьях, а некоторые (или все, или ни одного) из них могут быть созданы в коде; объекты в последней группе не сработают awakeFromNib, поскольку они этого не сделали.

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

1 голос
/ 21 марта 2012

Чтобы добавить к ответу Питера Хоси и после прочтения некоторых подробностей в другом вопросе, который вы разместили об этой проблеме, рассмотрим некоторые другие факторы:

  1. Класс «Владелец файла», выбранный в кончике, полностью игнорируется во время выполнения. Он существует только для удобства разработки - для проверки доступных действий и торговых точек.
  2. Есть ли вероятность, что вы найдете ноль указателей в -init? Розетки подключены после -init и до -awakeFromNib. Они никогда не будут связаны в -init.

Я пытаюсь понять последовательность инициализации (из вашего другого поста). Похоже, вы создаете новый экземпляр вашего подкласса CTTabContents и передаете его в метод CTBrowserWindowController вашего подкласса -addTabContents:. Затем CTBrowserWindowController загружает ваши объекты из пера.

Или, может быть, это неправильно. Возможно, вы создаете экземпляр вашего подкласса CTTabContentsController. Затем этот объект загружается TabContents.xib.

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

Еще один вопрос: используете ли вы ручную разблокировку / сохранение, автоматический подсчет ссылок или сборку мусора?

Наконец, я повторяю важность распечатки указателя self в ваших методах инициализации. В дополнение к -init и -awakeFromNib, попробуйте другие методы инициализации, такие как CTTabContents подкласс '-initWithFrame:. Когда вы обнаружите прерывистые нулевые указатели в оставшейся части отладки, распечатайте также указатели self. Вы, вероятно, также увидите различные значения self.

...