У моего приложения, очевидно, есть главное меню в строке меню. Один из этих пунктов меню содержит подменю, которое также доступно в NSPopUpButton
где-то в моем приложении.
До сих пор я просто дублировал пункты меню (программно) в коде, чтобы сделать всплывающую кнопку, но когда я меняю имя селектора или название пунктов меню и т. Д., Я неизбежно забываю также сделать те же изменения во всплывающей кнопке.
Я бы хотел определить меню в одном месте и использовать его в двух. Это возможно?
Я пробовал это:
// Get the same menu used by the main menu
NSMenu *addMenu = [[[[[NSApp mainMenu] itemWithTitle:@"Project"] submenu] itemWithTitle:@"Add"] submenu];
NSMenuItem *item = [[[NSMenuItem alloc] init] autorelease];
[item setImage:[NSImage imageNamed:NSImageNameAddTemplate]];
[item setOnStateImage:nil];
[item setMixedStateImage:nil];
addButton = [[NSPopUpButton alloc] initWithFrame:NSMakeRect(2, 5, 26.0, 16.0)];
[addButton setPullsDown:YES];
[addButton setBordered:NO];
[[addButton cell] setUsesItemFromMenu:NO];
[[addButton cell] setMenuItem:item];
[[addButton cell] setArrowPosition:NSPopUpNoArrow];
[addButton setAutoresizingMask:NSViewMaxXMargin];
[addButton setToolTip:@"Add Files or Directories"];
// Use the same menu as the main menu
[addButton addItemWithTitle:@"Add"];
[[addButton lastItem] setSubmenu:addMenu]; // <--- Breaks here
К сожалению, это вызывает ошибку времени выполнения с:
2010-12-19 02: 56: 11.571
MojiBaker [85384: a0f] * Утверждение
ошибка в - [NSMenuItem setSubmenu:],
/SourceCache/AppKit/AppKit-1038.35/Menus.subproj/NSMenuItem.m:695