除非应用已在运行,否则 URL 方案侦听器不起作用



我的 Mac App 需要在浏览器中单击其自定义 URL 方案时打开并转到特定页面。为了实现这一点,我在applicationDidFinishLaunch上添加了一个NSAppleEventManager。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager];
[eventManager setEventHandler:self
                  andSelector:@selector(handleGetURLEvent:withReplyEvent:)
                forEventClass:kInternetEventClass
                   andEventID:kAEGetURL];
}

此事件管理器也在应用程序委托中调用以下选择器:

- (void)handleGetURLEvent:(NSAppleEventDescriptor *)event withReplyEvent:(NSAppleEventDescriptor *)replyEvent
{
    NSString *urlString = [[event paramDescriptorForKeyword:keyDirectObject] stringValue];
    NSLog(urlString);
    //Parse & Do other stuff...
}

只要应用程序已经在运行,这就可以完美地获取调用应用程序的 URL。问题是,如果应用程序没有运行,那么应用程序将启动,但启动它的URL永远不会传递给handleGetURLEvent。

我敢肯定这与在URL事件已经发生后调用applicationDidFinishLaunch有关。URL事件是在NSNotization中还是其他什么?

我知道这应该很容易,但我不知道该怎么做。

感谢任何能够提供帮助的人。

尝试将 setEventHandler 放入委托的 awakeFromNib 中

最新更新