我有一个基于 SwiftUI 的 Mac 应用程序,其中包含多个WindowGroups
.
WindowGroups
1.使用 URL 方案打开不同的 SwiftUI
要打开这些窗口,我正在使用 URL 方案(如此处所述):
WindowGroup {
// ...
}
.handlesExternalEvents(matching: Set(arrayLiteral: "primaryWindow"))
...然后调用:
NSWorkspace.shared.open(URL(string: "myapp://primaryWindow")!)
☑️ 这很好用!
2. 检测从应用程序外部调用的 URL
我还需要能够识别和处理从应用程序外部调用的 URL 方案,例如myapp://somePath?someParameter=1
. 我找到了这个解决方案并在我的AppDelegate
:
func applicationWillFinishLaunching(_ notification: Notification) {
NSAppleEventManager.shared().setEventHandler(self, andSelector: #selector(self.handleGetURL(event:reply:)), forEventClass: AEEventClass(kInternetEventClass), andEventID: AEEventID(kAEGetURL)) )
}
☑️ 这也很好用,而且我的#selector
方法也像你期望的那样被调用。
3.问题:如何同时使用.handlesExternalEvents
和.setEventHandler
?
这是问题开始的地方:在调用.setEventHandler
我WindowGroups
不再对调用的 URL 做出反应后,我仍然无法打开新窗口。
这在某种程度上是有道理的,因为我已经在 AppDelegate 中专门注册了一个事件处理程序,kAEGetURL
但我不知道如何同时实现这两个功能。期待您的建议!