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

时间:2013-12-16 23:46:02

标签: macos cocoa url-scheme

我的Mac应用程序需要在浏览器中单击其自定义URL方案时打开并转到特定页面。为此,我在applicationDidFinishLaunching

上添加了一个NSAppleEventManager
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{

NSAppleEventManager *eventManager = [NSAppleEventManager sharedAppleEventManager];
[eventManager setEventHandler:self
                  andSelector:@selector(handleGetURLEvent:withReplyEvent:)
                forEventClass:kInternetEventClass
                   andEventID:kAEGetURL];

}

此事件管理器也在AppDelegate中调用以下选择器:

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

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

我确定这与在发生URL事件后调用applicationDidFinishLaunching有关。是NSNotification中的URL事件还是什么?

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

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

1 个答案:

答案 0 :(得分:1)

尝试将setEventHandler放入代理的awakeFromNib