Я бы забыл Получение NSMenuItem дерева NSMenu по коду заголовка и просто подключил бы каждое меню в IB.
Затем используйте setTitle для него при необходимости
ОБНОВЛЕНИЕ *
(см. Комментарии) Мне потребовалось некоторое время, чтобы выяснить, почему даже мой тест не работал !!.Я поместил атрибутивный заголовок в IB.
![enter image description here](https://i.stack.imgur.com/ntmYH.png)
Поэтому, когда позже я использовал setTitle .Свойство было установлено, но фактическое отображаемое меню было переопределено присвоенным заголовком.
Удаление присвоенного заголовка из IB.исправил это.И setTitle работает как положено.
Также я никогда раньше не использовал атрибутивный заголовок.И я просто вставил какой-то отформатированный цветной текст в заголовок IB.И пункт меню был одинаковым по цвету и шрифту.
Что я всегда хотел сделать, но думал, что это невозможно.
И сделать это программно легко.
NSMutableAttributedString * string = [[NSMutableAttributedString alloc] initWithString:@"newTestMenu"];
[string addAttribute:NSForegroundColorAttributeName value:[NSColor redColor] range:NSMakeRange(0,string.length)];
[_testMenu setAttributedTitle:string];