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