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

Posted

技术标签:

【中文标题】除非应用程序已经在运行,否则 URL 方案侦听器不起作用【英文标题】:URL Scheme Listener Not Working Unless App is Already Running 【发布时间】:2013-12-16 23:46:01 【问题描述】:

当我的 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...

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

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

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

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

【问题讨论】:

【参考方案1】:

尝试将 setEventHandler 放入委托的 awakeFromNib

【讨论】:

以上是关于除非应用程序已经在运行,否则 URL 方案侦听器不起作用的主要内容,如果未能解决你的问题,请参考以下文章

使用 Google Maps API android studio “除非您更新 Google Play 服务,否则应用程序将无法运行”

除非已注释掉print语句,否则收集的任务不会同时运行。为什么?

除非 url 被签名,否则限制对 S3 对象的访问

除非手动执行,否则 Elastic Beanstalk 上的“npm install”会失败

除非模拟器是 XS 类型,否则屏幕上的按钮不起作用

除非禁用 UAC,否则尝试访问报表管理器 URL 时出现权限错误