Делегат NSMenu не вызывается для его заполнения

У меня есть объект контроллера, который владеет NSMenu и является делегатом этого меню в интересах ленивого населения.

Однако ни numberOfItemsInMenu:, ни menuNeedsUpdate: никогда не вызываются, поэтому меню остается пустым.

Я подтвердил, что:

  • Объект контроллера не был освобожден. (Контроллер, в свою очередь, владеет меню.)
  • У него есть меню.
  • В меню есть делегат, и это контроллер.

Если я реализую menuWillOpen:, этот вызывается, но вы не должны заполнять там меню.

Я попытался отправить в меню сообщение update, но это не дало результата. Делегат остался не вызванным, а меню осталось пустым.

Если это важно: этого меню нет в главном меню; он используется в другом месте.

Почему меню не просит своего делегата заполнить его? Я что-то пропустил, или это просто сломано?


person Peter Hosey    schedule 24.11.2013    source источник
comment
Можете ли вы вставить свой код здесь. Чтобы мы тоже попробовали?   -  person Hussain Shabbir    schedule 21.12.2013
comment
@hussainShabbir: Нет. Код не принадлежит мне; Я работал по контракту. (Кроме того, я уже изменил его, чтобы не полагаться на эти методы, вызываемые системой.)   -  person Peter Hosey    schedule 21.12.2013
comment
У меня сейчас точно такая же проблема, и ваше упоминание о menuWillOpen: сэкономило мне много времени. Для записи, menuDidClose: также создает ту же проблему даже для установки свойства enabled пункта меню. Единственное, что работает, это menuNeedsUpdate:.   -  person eonil    schedule 15.11.2015


Ответы (1)


Возможно, вам нужна сильная ссылка на делегата. Попробуйте удалить объявление переменной из своего метода и создать переменную-член уровня класса. посмотрите на этот ответ: https://stackoverflow.com/a/21816149/1664943

person ThorstenC    schedule 16.02.2014
comment
Вы пропустили эту часть вопроса: «Я подтвердил, что: • Объект контроллера не был освобожден». - person Peter Hosey; 17.02.2014
comment
Был ли у вас когда-то View setMenu:.. ? Если да, то где у вас замедлилась переменная меню? В моем случае контроллер также НЕ был освобожден, но ARC сделал ссылку на моего делегата недействительной. - person ThorstenC; 17.02.2014
comment
Объект контроллера, о котором я говорил, является делегатом меню и его владельцем. - person Peter Hosey; 17.02.2014