我正在尝试在OS X上构建一个菜单栏应用程序,当点击菜单栏图标并显示自定义数量的NSMenuItem时,会显示NSMenu。金额在设置窗口中指定,我认为携带此号码的最佳方式是将其保存到NSUserDefaults并在值更改时发送NSNotificationCenter通知,因此负责设置和保存数据的控制器收到通知后,NSMenu可以从默认值加载此值。
我遇到的问题是,我不确定如何告诉菜单控制器订阅通知。由于我只是将NSMenu子类化,因此我没有真正的初始化器可以完成。或者相当于NSWindowControllers的didLoad方法。
另一种选择可能是让菜单控制器成为单身人士并直接与之通话,而无需通过通知中心。或者在app委托中引用它,这在这里也是相同的。
或许我完全过分思考这个问题,并且有一种更简单的方法可以解决这个问题吗?
感谢您的帮助和提示!
答案 0 :(得分:1)
当然NSMenu
有一个初始化程序。所有课程都有。
可能您在NIB中实例化了菜单。在这种情况下,加载NIB将通过调用-initWithCoder:
初始化菜单,NSMenu
在采用NSCoding
协议时实施。{/ p>
如果您要在代码中实例化菜单,那么您必须在其中调用初始值设定项(您调用[[NSMenu alloc] init...]
,其中init...
是某个特定的初始值设定项。)
带有通知的方案应该可以正常使用。
您还可以让您的应用控制器在您的设置窗口和菜单之间进行调解。它会有一个菜单的出口,所以它可以调用任何适当的方法,包括你的子类添加的方法。