Минимальное приложение Какао - проблема с меню - PullRequest
0 голосов
/ 03 октября 2018

Мне нужно реализовать минимальное приложение Какао без Xcode.Я пытаюсь этот пример:

https://www.cocoawithlove.com/2010/09/minimalist-cocoa-programming.html

#import <Cocoa/Cocoa.h>

int main()
{
    [NSAutoreleasePool new];
    [NSApplication sharedApplication];
    [NSApp setActivationPolicy:NSApplicationActivationPolicyRegular];
    id menubar = [[NSMenu new] autorelease];
    id appMenuItem = [[NSMenuItem new] autorelease];
    [menubar addItem:appMenuItem];
    [NSApp setMainMenu:menubar];
    id appMenu = [[NSMenu new] autorelease];
    id appName = [[NSProcessInfo processInfo] processName];
    id quitTitle = [@"Quit " stringByAppendingString:appName];
    id quitMenuItem = [[[NSMenuItem alloc] initWithTitle:quitTitle
        action:@selector(terminate:) keyEquivalent:@"q"] autorelease];
    [appMenu addItem:quitMenuItem];
    [appMenuItem setSubmenu:appMenu];
    id window = [[[NSWindow alloc] initWithContentRect:NSMakeRect(10, 10, 200, 200)
        styleMask:NSTitledWindowMask backing:NSBackingStoreBuffered defer:NO]
            autorelease];
    [window setTitle:appName];
    [window makeKeyAndOrderFront:nil];
    [NSApp activateIgnoringOtherApps:YES];
    [NSApp run];
    return 0;
}

Работает хорошо, за исключением одной маленькой проблемы: сразу после запуска меню изменяется, но неактивно (при нажатииничего такого).Если я выберу какое-нибудь другое приложение и вернусь к этому минимальному, меню начнет работать как положено.

Есть идеи, как это исправить?

1 Ответ

0 голосов
/ 04 октября 2018

Кажется, это ошибка в macOS где-то выше версии 10.8.5 .

Я пробовал код (и похожие варианты в 10.13.6 ) и все они потерпели неудачу, как вы описали.Компиляция того же кода и запуск в версии 10.8.5 не имеет такого поведения, и к меню можно получить доступ, как и следовало ожидать.

Заключение :

Я бы порекомендовал сообщить об этом Appleваш код как ARC запрещает это и не может использоваться с последними Xcode SDK.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...