首页 > 解决方案 > 最小的 Cocoa 应用程序 - 菜单问题

问题描述

我需要在没有 Xcode 的情况下实现最小的 Cocoa 应用程序。我正在尝试这个例子:

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;
}

它运行良好,除了一个小问题:启动后,菜单立即更改,但处于非活动状态(单击它什么也不做)。如果我选择其他一些应用程序,然后返回到那个最小的应用程序,菜单就会按预期开始工作。

知道如何解决这个问题吗?

标签: objective-cmacoscocoa

解决方案


对于最小的应用程序,我有同样的问题。他们没有正确处理事件。

在这一点上 (10.15.2 (19C57)) 这些是它正常工作所需要的。

  • .app带有扩展名的应用程序包文件夹。(也许是可选的)
  • Contents/Info.plist具有CFBundleIdentifier价值。(不需要其他密钥)
  • Contents/MacOS/(your-executable)文件。

推荐阅读