Estoy intentando implementar un esquema de URL personalizado para mi aplicación. He agregado las líneas necesarias para mi Info.plist. Después de llamar a la URL especificada (p. Ej .: myapp: //) se inicia la aplicación.Esquema de URL: Qt y mac
Si quiero manejar la URL, he encontrado estos pasos:
@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
El código anterior funciona Si la aplicación se está ejecutando, pero si la URL es llamado y la aplicación se terminó, la evento no es atrapado Creo que esto se debe a esto: NSApplicationDidFinishLaunchingNotification. Cambiarlo a NSApplicationWillFinishLaunchingNotification hace que no se capturen eventos. Tal vez Qt lo maneje antes que yo, pero no puedo encontrar una solución al problema.
Parece que escucha a la notificación NSApplicationDidBecomeActiveNotification resuelve el problema. No creo que sea la mejor manera de hacerlo, así que dejo la pregunta abierta para mejores ideas :) – birmacher