Я пытаюсь реализовать собственную схему URL для моего приложения. Я добавил необходимые строки для моего Info.plist. После вызова указанного URL (например, myapp: //) приложение запускается.
Если я хочу обработать URL, я нашел следующие шаги:
@interface EventHandler : NSObject {
}
@end
@implementation EventHandler
- (id)init {
self = [super init];
if (self) {
NSLog(@"eventHandler::init");
NSNotificationCenter* defaultCenter = [NSNotificationCenter defaultCenter];
[defaultCenter addObserver:self
selector:@selector(applicationDidFinishLaunching:)
// name:NSApplicationWillFinishLaunchingNotification
name:NSApplicationDidFinishLaunchingNotification
object:nil];
}
return self;
}
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification {
NSAppleEventManager *appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleGetURLEvent:withReplyEvent:) forEventClass:kInternetEventClass andEventID:kAEGetURL];
}
- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
NSString* url = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
NSLog(@"%@", url);
}
@end
Приведенный выше код работает, если приложение запущено, но если URL-адрес вызывается и приложение завершается, событие не перехватывается. Я думаю, что это потому, что это: NSApplicationDidFinishLaunchingNotification.
Изменение его на NSApplicationWillFinishLaunchingNotification приводит к тому, что перехватываются не события. Может быть, Qt справится с этим раньше меня, но я не могу найти обходной путь для этой проблемы.