【问题标题】:NSMenu delegate not called to populate it未调用 NSMenu 委托来填充它
【发布时间】:2013-11-24 02:07:46
【问题描述】:

我有一个控制器对象,它拥有一个 NSMenu 并且是该菜单的委托,为了懒惰的人群。

但是,numberOfItemsInMenu:menuNeedsUpdate: 都没有被调用过,所以菜单仍然是空的。

我已经确认:

  • 控制器对象尚未被释放。 (反过来,控制器拥有菜单。)
  • 它确实有一个菜单。
  • 菜单确实有一个委托,那就是控制器。

如果我实现menuWillOpen:,那调用的,但是you're not supposed to populate the menu there

我尝试向菜单发送update 消息,但没有效果。代表仍未被调用,菜单仍为空。

如果相关:此菜单不在主菜单中;它在其他地方使用。

为什么菜单不要求其代表填充它?是我遗漏了什么,还是刚刚坏了?

【问题讨论】:

  • 你能把你的代码粘贴到这里吗?这样我们也可以尝试一下?
  • @hussainShabbir:不。代码不属于我;我在做一份合同工。 (除此之外,我已经将其更改为不依赖系统调用的那些方法。)
  • 我现在遇到了完全相同的问题,您提到menuWillOpen: 为我节省了很多时间。作为记录,menuDidClose: 即使设置菜单项的enabled 属性也会产生同样的问题。唯一有效的是menuNeedsUpdate:

标签: cocoa nsmenu


【解决方案1】:

也许您需要对委托的强引用。 尝试将变量声明移出您的方法并创建一个类级别的成员变量。 看看这个答案:https://stackoverflow.com/a/21816149/1664943

【讨论】:

  • 您错过了这部分问题:“我已经确认: • 控制器对象尚未被释放。”
  • 您是否曾经有过 View setMenu:.. ?如果是 - 您在哪里使 Menu 变量减速?在我的情况下,控制器也没有被释放,但是 ARC 已经使对我的委托的引用无效。
  • 我所指的控制器对象是菜单的委托及其所有者。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-04-06
  • 2014-03-18
  • 2019-08-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多