NSMenu 初始值设定项或 didLoad 等价物?

NSMenu initializer or didLoad equivalent?

我正在尝试在 OS X 上构建一个菜单栏应用程序,当单击具有自定义数量的 NSMenuItems 的菜单栏图标时会显示 NSMenu。数量在设置中指定 window 我认为携带这个数字的最好方法是将它保存到 NSUserDefaults 并在值更改时发送 NSNotificationCenter 通知,因此控制器负责设置和保存 NSMenu 的数据可以在收到通知时从默认值加载此值。

我在这里遇到的问题是我不确定如何告诉菜单控制器订阅通知。因为我只是将 NSMenu 子类化,所以我实际上没有可以完成此操作的初始化程序。或者等效于 NSWindowControllers 具有的 didLoad 方法。

另一种选择是让菜单控制器成为一个单独的控制器,并直接与其对话,而无需通过通知中心。或者在 app delegate 中引用它,这在此处是一样的。

或许我完全想多了,有更简单的方法来处理这个问题吗?

感谢您的帮助和提示!

当然NSMenu有一个初始值设定项。所有 类 都可以。

您可能在 NIB 中实例化了菜单。在这种情况下,加载 NIB 将通过调用 -initWithCoder: 初始化菜单,NSMenu 作为采用 NSCoding 协议的一部分实现。

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

您的通知方案应该可以正常工作。

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