在C++下创建一个NSWindow

lex*_*hou 3 cocoa objective-c++

我做了一个简单的实验,我在Xcode中编写了以下代码:

int main(int argc, char** argv)
{
    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];
    NSApplication* app = [[NSApplication alloc] init];
    NSWindow* window = [[NSWindow alloc] 
        initWithContentRect: NSMakeRect(0, 0, 640, 480)
        styleMask: NSTitledWindowMask | NSMiniaturizableWindowMask
        backing: NSBackingStoreBuffered
        defer: NO];
    [window setTitle: @"New Window"];
    [window center];
    [window makeKeyAndOrderFront:nil];
    [app run];
    [pool release];
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

它按预期运行,一个新的空窗口,但如果我使用命令行在终端下编译它:

$ g++ test.mm -framework Cocoa
$ ./a.out
Run Code Online (Sandbox Code Playgroud)

没有窗口,它会在[app run]轻而易举.

我做错了吗?为什么Xcode和命令行之间有不同的行为?有人能告诉我如何在命令行中实现相同的行为吗?

提前致谢.

Myz*_*enz 5

在10.7.2机器上使用你的代码和编译它对我来说很好......窗口显示出来(尽管在我的终端窗口后面,并不显示为正在运行的应用程序).

如果您希望将应用程序显示为在Dock中运行的进程,则必须将其正确打包在.app包中.如果您执行以下操作:

g++ test.mm -framework Cocoa
mkdir -p cli.app/Contents/MacOS
cp a.out cli.app/Contents/MacOS/cli
Run Code Online (Sandbox Code Playgroud)

然后从命令行运行cli.app/Contents/MacOS/cli,您的进程将显示为正在运行的应用程序.