Как реализовать протокол NSApplicationDelegate в приложении glfw
В настоящее время я программирую приложение с использованием glfw в MacOS X. Моя единственная проблема заключается в том, что приложение не использует AppDelegate, но выполняет всю инициализацию в файле main.cpp, как утилита командной строки. Я специально хочу реализовать функцию
- (BOOL)application:(NSApplication *)sender openFile:(NSString *)filename;
и я уже зарегистрировал расширения файлов в файле plist, и когда я пытаюсь открыть их, я получаю сообщение об ошибке"Не удалось открыть документ"Doc.xxx". MyApp не может открывать файлы в формате"xxx".
Я попытался создать синглтон, который устанавливает себя как делегат, но он просто не вызывает функцию. Кто-нибудь может прокомментировать возможность создания класса и реализации функций NSApplicationDelegate?
1 ответ
По сути, в вашем коде нет ничего, чтобы получать события от операционной системы и перекачивать полученные события.
Решение, согласно другому переполнению стека Q / A, заключается в том, чтобы вручную вызывать NSApplication. Вам все еще нужно решить, куда подключить цикл рендеринга OpenGL, поскольку [запуск NSApp] не возвращается, пока приложение не завершит работу. Другим решением может быть замена пользовательского приложения NSApplication. http://www.cocoawithlove.com/2009/01/demystifying-nsapplication-by.html
Скопировано в значительной степени дословно из этого ответа с учетом изменений для ARC: /questions/12581215/zapustite-nsrunloop-v-programme-komandnoj-stroki-kakao/12581231#12581231
@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