首页 文章

NSMenu初始化程序或didLoad等效?

提问于
浏览
0

我正在尝试在OS X上构建一个菜单栏应用程序,当点击菜单栏图标并显示自定义数量的NSMenuItem时,会显示NSMenu . 金额在设置窗口中指定,我认为携带此号码的最佳方式是将其保存到NSUserDefaults并在值更改时发送NSNotificationCenter通知,因此负责设置和保存数据的控制器收到通知时,NSMenu可以从默认值加载此值 .

我在这里遇到的问题是,我不确定如何告诉菜单控制器订阅通知 . 由于我只是将NSMenu子类化,因此我没有真正的初始化器可以完成 . 或者相当于NSWindowControllers所具有的didLoad方法 .

另一种选择可能是让菜单控制器成为单身人士并直接与之通话,而无需通过通知中心 . 或者在app委托中引用它,这里的内容相同 .

或者也许我完全过度思考这个问题,并且有一种更简单的方法可以解决这个问题?

感谢您的帮助和提示!

1 回答

  • 1

    当然 NSMenu 有一个初始化器 . 所有课程都有 .

    可能是您在NIB中实例化了菜单 . 在这种情况下,加载NIB将通过调用 -initWithCoder: 初始化菜单, NSMenu 在采用 NSCoding 协议时实现 NSMenu .

    如果你在代码中实例化菜单,那么你必须调用初始化程序作为其中的一部分(你调用 [[NSMenu alloc] init...] ,其中 init... 是一些特定的初始化程序) .

    带通知的方案应该可以正常工作 .

    您还可以让您的应用控制器在您的设置窗口和菜单之间进行调解 . 它会有一个菜单的出口,所以它可以调用任何适当的方法,包括你的子类添加的方法 .

相关问题