РЕДАКТИРОВАТЬ: какой-то идиот захотел переписать мой ответ. Не. Или я его удалю. Согласно рецензенту, который первоначально отклонил редактирование: «Это изменение слишком незначительное; предлагаемое изменение должно быть существенным улучшением, затрагивающим несколько проблем в посте». Итак: не надо.
У Apple есть официальный обходной путь (где они неохотно принимают свою ошибку в жестком кодировании меню):
http://developer.apple.com/library/mac/#qa/qa2001/qa1289.html
Кажется, работает нормально, после настройки IBOutlet:
@property( nonatomic, retain) IBOutlet NSMenu* fileMenu;
... и убедитесь, что у вас есть класс AppDelegate, представленный внутри MainWindow.xib (например, с помощью объекта blue-cube, и установите для этого класса тот класс, которым является ваш AppDelegate) ... чтобы вы могли подключиться к самому меню «Файл» внутри NIB прямо к вашему приложению-делегату.
РЕДАКТИРОВАТЬ: на самом деле, модификация - исходный код Apple неправильно компилируется с Xcode4, генерируя предупреждение компилятора. Вы хотите это вместо:
NSInteger openDocumentMenuItemIndex = [self.fileMenu indexOfItemWithTarget:nil andAction:@selector(openDocument:)];
if (openDocumentMenuItemIndex>=0 &&
[[self.fileMenu itemAtIndex:openDocumentMenuItemIndex+1] hasSubmenu])
{
// APPLE'S COMMENT: We'll presume it's the Open Recent menu item, because this is
// APPLE'S COMMENT: the heuristic that NSDocumentController uses to add it to the
// APPLE'S COMMENT: File menu
[self.fileMenu removeItemAtIndex:openDocumentMenuItemIndex+1];
}