如何在glfw应用程序中实现NSApplicationDelegate协议

时间:2014-08-25 14:27:39

标签: c++ macos glfw nsapplication-delegate

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

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

我已经在plist文件中注册了文件扩展名,当我尝试打开它时,我收到一条错误消息,说明" 文档" Doc.xxx"不能打开。 MyApp无法打开" xxx"格式。

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

1 个答案:

答案 0 :(得分:0)

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

根据另一个堆栈溢出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