私のアプリケーションにカスタムURLスキームを実装しようとしています。 Info.plistに必要な行を追加しました。指定されたURL(例:myapp://)を呼び出した後、アプリケーションが起動します。URLスキーム - Qt and mac
私は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が処理しているかもしれませんが、問題の回避策を見つけることができません。
それはそのリスニングようですNSApplicationDidBecomeActiveNotification通知は問題を解決します。 私はそれが最善の方法だとは思わないので、私はいくつかのより良いアイデアのために質問を開いたままにしています:) – birmacher