1

我目前正在 MacOS X 中使用 glfw 编写应用程序。我唯一的问题是该应用程序不使用 AppDelegate,而是像命令行实用程序一样在 main.cpp 文件中进行所有初始化。我特别想实现这个功能

- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;

我已经在 plist 文件中注册了文件扩展名,当我尝试打开它们时,我收到一条错误消息,提示“无法打开文档“Doc.xxx”。MyApp 无法打开“xxx”格式的文件。

我试图创建一个将自己设置为委托的单例,但它只是不调用该函数。任何人都可以评论创建类和实现 NSApplicationDelegate 函数的可能性吗?

4

1 回答 1

1

基本上,您的代码中没有任何内容可以从操作系统接收事件并泵送接收到的事件。

根据另一个堆栈溢出 Q/A,解决方案似乎是手动调用 NSApplication。您仍然需要决定将 OpenGL 渲染循环挂接到何处,因为 [NSApp run] 在应用程序完成之前不会返回。另一种解决方案可能是进行自定义 NSApplication 替换。http://www.cocoawithlove.com/2009/01/demystifying-nsapplication-by.html

考虑到 ARC 的修改,从这个答案中逐字复制:https ://stackoverflow.com/a/2154666/1874323

@autoreleasepool { 
    AppDelegate * delegate = [[AppDelegate alloc] init];

    NSApplication * application = [NSApplication sharedApplication];
    [application setDelegate:delegate];
    [NSApp run]; // Note this never returns until the app finishes, so you need to decide where to hook your code into
}

与往常一样,您可以从 Apple 网站找到文档: https ://developer.apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes/NSApplication_Class/Reference/Reference.html

于 2014-08-28T11:46:48.397 回答