Когда вы создаете NSMenuItem
, ваш предмет должен иметь действительную цель и действительный селектор.Это означает, что цель не может быть нулевой, и должна отвечать переданному селектору.Имейте в виду, что в этом случае селектор NULL не активирует пункт меню.
NSMenu *myMenu;
NSMenuItem *myItem;
myMenu = [[NSMenu alloc] initWithTitle:@""];
myItem = [[NSMenuItem alloc] initWithTitle:@"Test" action:@selector(validSelector:) keyEquivalent:@""];
[myItem setTarget:myTarget];
[myMenu addItem:myItem];
// Do anything you like
[myMenu release];
[myItem release];
РЕДАКТИРОВАТЬ: Я видел, что вы звоните -[NSMenuItem setEnabled:]
с YES
после созданияпункт меню.В этом нет необходимости, так как они будут включены по умолчанию.
РЕДАКТИРОВАТЬ 2: Как указал NSGod (см. Комментарий ниже), целью может быть ноль.В этом случае первый респондент вашего приложения получит переданный метод.То есть, если у первого респондента этот метод реализован. (правка 3) Однако, если это не так, метод будет отправлен следующему респонденту в цепочке респондентов.Это продолжается до тех пор, пока не будет найден респондент, который отвечает на селектор, или пока не останется респондентов, чтобы исследовать.Если ответчик не найден, пункт меню не будет включен.