Я, должно быть, упускаю что-то простое, но не вижу этого. Сначала настройка:
DATreeView
, подкласс NSView
DATreeViewController
, подкласс NSViewController
MainMenu.xib
имеет экземпляр DATreeViewController
, который настроен для загрузки представления из DATreeView.xib
MainMenu.xib
также имеет экземпляр DendreaAppDelegate
, который имеет выход DATreeViewController
(который подключен до MainMenu.xib
DATreeViewController
экземпляра.
Do Something!
, пункт меню, предназначенный для отправки сообщения doSomething:
Первому ответчику.
- Не случайно,
DATreeViewController
имеет действие под названием doSomething:
.
Я хочу, чтобы пункт меню Do Something!
вызвал действие doSomething:
на DATreeViewController
, и давайте представим, что я не могу просто установить соединение цель / действие напрямую. Я остановлюсь прямо здесь и спрошу, мой дизайн совершенно неправильный? Разве то, что я пытаюсь сделать глупо / зло /, может посрамить меня в глазах моего Бога?
Нет? Отлично. Теперь, на всю жизнь, я не могу заставить пункт меню быть активным. Я делаю это на Snow Leopard, если это что-то меняет.
Чтобы добиться хорошей интеграции между NSView
и NSViewController
, например, управляя цепочкой респондента, я последовал примеру Мэтта Галлахера , с одним существенным изменением: ни в одном из этапов процесса загрузки NIB NSView
, похоже, не получает сообщение setViewController:
, поэтому я отправляю это сообщение я в DATreeViewController
loadView
сообщении. Из того, что я могу сказать, после запуска следующего кода в applicationDidFinishLaunching:
NSView *view = self.treeViewController.view;
[self.window.contentView addSubview:view];
цепочка респондента настроена должным образом, то есть:
NSWindow < NSView < DATreeViewController < DATreeView
Я ожидал, что, поскольку DATreeViewController
является частью цепочки респондента, и как он отвечает на doSomething:
, и поскольку он не реализует проверку, все, что мне нужно было бы сделать, это использовать Interface Builder для подключите элемент меню Do Something!
к прокси-серверу первого ответчика, используя doSomething:
в качестве его действия, и пункт меню будет активен автоматически.
Что я делаю не так? Спасибо всем за неоценимую помощь!