我的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事件还是什么?
我知道这应该很容易,但我不知道该怎么做。
感谢能够提供帮助的任何人。
答案 0 :(得分:1)
尝试将setEventHandler放入代理的awakeFromNib