I myself struggled with this issue.
I think the βrightβ answer is to rely on a chain of defendants. For example, to associate the action of a toolbar item, you can select the first responder of the root window. And then show the attribute inspector. In the attribute inspector add your own action (see photo).

Then connect the toolbar item to this action. (Control the drag from the toolbar item to the first responder and select the action you just added.)
Finally, you can go to ViewController (+ 10.10) or another object, if it is in the responder chain, where you want to receive this event and add a handler.
Alternatively, instead of defining an action in the attribute inspector. You can simply write your IBAction in your ViewController. Then go to the toolbar item and drag the mouse over the window controller of the first responder - and select the newly added IBAction. The event will then move through the chain of responders until it is received by the view controller.
I think this is the right way to do this without introducing any additional communication between your controllers and / or forwarding the call manually.
The only problem I encountered - being new to Mac dev myself - sometimes the toolbar item is disabled after receiving the first event. Therefore, when I think this is the right approach, there are still some problems that I have come across.
But I can get the event elsewhere without any additional connection or gymnastics.
Bladebunny
source share