Uygulamam için özel bir URL düzeni uygulamaya çalışıyorum. Info.plist için gerekli satırları ekledim. Belirtilen URL'yi çağırdıktan sonra (örneğin: myapp: //) uygulama başlatılır. URL şeması - Qt ve mac
Ben URL'yi işlemek istiyorsanız
, Bu adımları tespit ettik:@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
uygulama çalışıyorsa yukarıdaki kod çalışıyor ama URL çağrılan ve uygulama sonlandırıldı eğer, olay yakalanmadı. Bunun nedeni şudur: NSApplicationDidFinishLaunchingNotification. NSApplicationWillFinishLaunchingNotification olarak değiştirilmesi, olay dışı olayların yakalanmasına neden olur. Belki Qt benden önce işler, ancak sorun için bir çözüm bulamıyorum.
O dinleme görünüyor NSApplicationDidBecomeActiveNotification bildirimi sorunu çözer. Bunun en iyi yol olduğunu düşünmüyorum, bu yüzden daha iyi fikirler için soruyu açık bırakıyorum :) – birmacher