我的 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 中