- 我插入了一些子菜单作为主菜单的窗口项子菜单
- 我有一个我的对象的实例(假设它的类名是 MenuController)从 NSObject 继承并支持来自 NSMenuDelegate 方法的 2:-numberOfItemsInMenu:--menu:updateItem:atIndex:shouldCancel:
- 此实例作为蓝色对象添加到 NIB 中以在运行时唤醒
- 步骤 2-3 中的对象配置为子菜单的委托(步骤 1)
现在,我可以在运行时提供子菜单内容。
接下来,我执行以下操作:我可以添加新项目或从通过协议和委托映射到实际子菜单的数组(在包含菜单标题的 MenuController 内)中删除旧项目。一切正常。除了一件事:我喜欢为我的动态菜单项分配快捷方式。CMD-1、CMD-2、CMD-3 等
窗口/我的子菜单/我的项目1 CMD-1,我的项目2 CMD-2,...
所以,为了调用一些我不想去 Window / MySubmenu / MyItem 用鼠标单击它的项目,我只想按一个快捷方式,比如 CMD-3 来调用该项目。
好的,它会定期按预期工作。但是,一般来说,除了打开 Window / MySubmenu 重新加载其内容外,我无法通知 Main Menu 我的嵌套子菜单更改。重现问题的一种稳定方法 - 只需尝试删除某些项目并按下分配给它的旧快捷方式,在您创建新项目作为已删除的替换后 - 宾果游戏 - 在导航到 Window / MySubmenu 以查看当前子菜单内容之前快捷方式将不起作用.
我不知道强制主菜单重建其子菜单的方法...我尝试过:[[NSApp mainMenu] update] 和使用 NSNotificationCenter 发送 NSMenuDidAddItemNotification、NSMenuDidRemoveItemNotification、NSMenuDidChangeItemNotification 的游戏
我尝试到我的子菜单并显式调用更新方法 - 没有办法......有时 AppKit 调用我的委托方法 - 我看到了,有时它不想调用任何东西。看起来像一个随机策略。
如何确保在“某些调用”之后我的子菜单在内部数组修改后处于实际状态?