Почему мой выход нулевой?

У меня проблемы с проектом какао. Я показываю клавиатуру, состоящую из NSButtons, и мне бы хотелось, чтобы при нажатии одной из клавиш метка добавлялась в NSTextField. У меня есть контроллер, который я использую как синглтон, поэтому каждая клавиша «знает», как получить доступ к контроллеру. В контроллере у меня есть выход, связанный с NSTextField. Когда я нажимаю на клавишу, ничего не происходит. Поэтому я использовал что-то вроде NSLog(@"%@", [[[OakController] sharedInstance] textarea]) для события mouseDown, и в выводе консоли я получаю (null).

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

Вот код контроллера: https://gist.github.com/1090564. Извините за отсутствие окраски синтаксиса.

Спасибо, что читаете, ребята!


person ksol    schedule 18.07.2011    source источник


Ответы (1)


Я предполагаю, что на самом деле у вас есть несколько экземпляров OakController вместо одного, как вы ожидаете. Вы перетащили синий куб в документ IB и изменили его пользовательский класс на OakController? Это будет выделять и инициализировать новый объект каждый раз. Я предполагаю, что ваш метод sharedInstance также выделяет и инициализирует экземпляр.

Попробуйте добавить метод awakeFromNib в OakController и добавьте точку останова. Запишите значение указателя себя. Во втором случае, когда выход неожиданно равен нулю, также запишите адрес указателя себя.

person Jon Hess    schedule 18.07.2011
comment
Да, я перетащил синий куб и изменил его класс. И снова да, я получил два разных значения указателя, одно из awakeFromNib, а другое, когда я нажимаю на клавиши. - person ksol; 19.07.2011
comment
@Katen: Тогда это причина, по которой ваш выход равен нулю: у вас есть два разных объекта. В объекте внутри вашего пера устанавливается выход. В объекте за пределами вашего пера это не так. - person Chuck; 19.07.2011
comment
Как мне это исправить? Мой одноэлементный класс реализован неправильно? - person ksol; 19.07.2011
comment
@Katen: Хотя вам нужно установить __shared_instance, это не решит вашу проблему. Это правильное объяснение. - person Deepak Danduprolu; 19.07.2011
comment
Хорошо, я знаю, почему. Но все же нужно выяснить, как это исправить. Похоже, я не могу создавать разные экземпляры (когда я использую [[OakController alloc] init] дважды подряд, он возвращает мне один и тот же указатель), но каким-то образом перо может. - person ksol; 19.07.2011