В настоящее время я программирую приложение, используя glfw в MacOS X. Моя единственная проблема заключается в том, что приложение не использует AppDelegate, но выполняет всю инициализацию в файле main.cpp, как утилита командной строки. Я специально хочу реализовать функцию
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
и я уже зарегистрировал расширения файлов в файле plist, и когда я пытаюсь открыть их, я получаю сообщение об ошибке «Документ «Doc.xxx» не может быть открыт. MyApp не может открывать файлы в формате «xxx».
Я попытался создать синглтон, который устанавливает себя в качестве делегата, но он просто не вызывает функцию. Кто-нибудь может прокомментировать возможность создания класса и реализации функций NSApplicationDelegate?
По сути, в вашем коде нет ничего, чтобы получать события от ОС и перекачивать полученные события.
Согласно другому переполнению стека Q / A, решение состоит в том, чтобы вручную вызывать NSApplication. Вам все еще нужно решить, куда подключить цикл рендеринга OpenGL, так как [запуск NSApp] не возвращается, пока приложение не завершит работу. Другим решением может быть замена пользовательского приложения 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