Должно быть, мне не хватает чего-то простого, но я этого не вижу. Во-первых, настройка:
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!
к Прокси-сервер First Responder с doSomething:
в качестве действия, и пункт меню будет активен автоматически.
Что я делаю неправильно? Всем спасибо за неоценимую помощь!