当前位置: 首页 > 面试题库 >

如何通过Swift中的URLScheme捕获用于启动OS X应用程序的URL?

令狐宏伟
2023-03-14
问题内容

我一直在尝试在Swift的Objective-C中复制执行此操作的常用方法,以用于我正在使用的新swift应用程序。

如何在Objective-
C中执行此操作已得到了很好的说明,您将获得共享的Apple事件管理器和调用setEventHandler方法,以将函数注册为kInternetEventClass具有事件id
的事件类的处理程序kAEGetURL

因此,我正在尝试将此代码添加到全新项目中的模板AppDelegate.swift中,以执行相同的操作:

func applicationWillFinishLaunching(aNotification: NSNotification?) {
    var appleEventManager:NSAppleEventManager = NSAppleEventManager.sharedAppleEventManager()
    appleEventManager.setEventHandler(self, andSelector: "handleGetURLEvent:withReplyEvent:", forEventClass: kInternetEventClass, andEventID: kAEGetURL)
}

func handleGetURLEvent(event: NSAppleEventDescriptor?, replyEvent: NSAppleEventDescriptor?) {
    println("yay");
}

据我所知,这只是标准Objective-
c调用的语法转换。但是我forEventClass和方法的andEventId参数都收到类型错误setEventHandler

'NSNumber' is not a subtype of 'AEEventClass'forEventClass论证

和:

'NSNumber' is not a subtype of 'AEEventId'andEventID论证

我不知道我在这个阶段既是做错了kInternetEventClass,并kAEGetURL都通过常量定义的苹果......当然我不要求他们转换NSNumber类型各自需要的类型?如果我是我,我将无法解决。


问题答案:

据我从文档中得知,类采用常量并将其转换为正确的类型:

func applicationWillFinishLaunching(aNotification: NSNotification?) {
    var appleEventManager:NSAppleEventManager = NSAppleEventManager.sharedAppleEventManager()
    appleEventManager.setEventHandler(self, andSelector: "handleGetURLEvent:withReplyEvent:", forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL))
}


 类似资料:
  • 显示 “无法导入资源”@AcmeDemoBundle/Controller/SecuredController。php“from”D:/UserData/WWWRoot/Symfony/app/config/routing。yml”。确保“AcmeDemoBundle/Controller/SECUEDCONTROLLER”。php“bundle已正确注册并加载到应用程序内核类中。” 这是我的 处

  • 我有一个spring启动应用程序,我需要通过进入文件夹目录并通过命令行启动我的web应用程序来启动它。我有一门课叫应用。java及其内部代码如下所示。 我设置了类路径,然后试图运行命令"",但我得到了这个错误消息""

  • 是否有一种干净的方法来检测spring启动应用程序何时停止,并在停止之前执行一些操作?一种停止服务的CommandLineRunner 提前谢谢

  • 问题内容: 当前,我有一个Java Standalone Swing应用程序。 现在,当用户单击Swing应用程序中的按钮时,我想启动另一个Java应用程序(说:Calculator.jar) 我可以知道什么是便携式方法吗?这样它就可以在多个OS中工作吗? 问题答案: 使用或只是将其放在类路径中并调用其。

  • 我尝试使用本地主机url访问我的endpoint——http://localhost:8080/这是我的Application.java文件 这是我的终点 我试着用这个网址http://localhost:8080/all

  • 问题内容: 如何捕捉到不同的信号,如和斯威夫特是否正确?例如,当人们通过按- 停止我的脚本时,我想在终止脚本之前进行一些清理。 问题答案: 调度源 可用于监视UNIX信号。 这是一个简单的示例,《 并发编程指南 》中“监视信号”部分中C代码的Swift 3转换 。 请注意,这需要一个活动的GCD事件循环,例如 在命令行程序中。