在 Mac 上的 SwiftUI 中处理“打开方式”中的多个 URL

2023-12-06

在 SwiftUI 中,我们被赋予了onOpenURL(执行:)功能。但是,在 macOS 中,我们可以在 Finder 中选择多个文件,然后单击“打开方式”。如果我使用带有以下代码的应用程序打开这些文件:

@main
struct testURLMacApp: App {
    var body: some Scene {
        WindowGroup {
            ContentView()
                .onOpenURL { url in
                    print("RECEIVED \(url)")
                }
        }
    }
}

看来此功能对于多个文件无法正常工作。有时似乎会调用一次执行闭包,或者有时如果幸运的话最多可以连续调用 2-3 次。有时它似乎会做一些奇怪的事情,例如打开重复的应用程序窗口。

有没有人找到解决方法,或者在 SwiftUI 应用程序的单个窗口中处理打开多个文件的正确方法?

编辑:这实际上是为了让现有的 iOS 应用程序在 Apple Silicon Mac 上运行。所以AppKit不可用。


如上所述(见下文),它注册外部事件的处理程序,但仅首先使用它来创建新场景(可能是由于限制,可能是错误,可能是故意的,谁知道......)

demo1

所以如果我们有.onOpenURL注册的处理程序捕获一个 URL 并为其创建新场景,其他的则保持未处理并在AppDelegate(见下文)。如果我们删除.onOpenURL彻底地,所有从 Finder 打开的 URL 都转移到 AppDelegate。

使用 Xcode 13.4 / macOS 12.4 进行测试

in App

@NSApplicationDelegateAdaptor(AppDelegate.self) var appDelegate
var body: some Scene {
    WindowGroup {
        ContentView()
    }
    // needed because WindowGroup scene seems have default
    // handler for external events, so opens new scene even
    // if no onOpenURL or userActivity callbacks are present
    .handlesExternalEvents(matching: [])   // << here !!
}

并委托

class AppDelegate: NSObject, NSApplicationDelegate {
    func application(_ application: NSApplication, open urls: [URL]) {
        print("Unhandled: \(urls)")    // << here !!
    }
}

完整的测试模块在这里

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Mac 上的 SwiftUI 中处理“打开方式”中的多个 URL 的相关文章

  • Mac OSX 10.6 上的 Python mysqldb 不工作

    我正在使用 Python 2 7 并尝试让 Django 项目在 MySQL 后端运行 我已经下载了 mysqldb 并按照此处的指南进行操作 http cd34 com blog programming python mysql pyth
  • 如何使用 SwiftUI 创建自定义滑块?

    我可以使用 SwiftUI 创建滑块 但无法更改滑块的样式 如下图所示 问题 我无法在 SwiftUI 中找到任何选项来更改滑块样式 注意 我想仅使用 SwiftUI 创建它 我已经在 Swift 中使用 创建了这个滑块 https git
  • 在 Firebase 和 Swift 3 中注册之前如何验证用户名是否存在?

    我整合了五个视图控制器的注册流程 而不是一个用于 Firebase 注册的中央 VC 通常情况下 在注册之前会出现数据丢失的问题 但我会以编程方式将所有输入的值通过 segue 推送到最终确认页面 并将数据发送到 Firebase 最终进行
  • 安装 libjpeg v8 到 /opt/local

    如何在 OSX 上将 libjpeg 8 安装到 opt local 我问的原因是我想用以下方法制作大脑活动的小电影MNE C 库 http www nmr mgh harvard edu martinos userInfo data MN
  • 访问 UserDefault 数组 URL 以填充 CollectionView

    这是上一篇文章的后续内容here https stackoverflow com questions 48142238 save and append an array in userdefaults from imagepickercon
  • 在 Swift 中将半精度浮点数(字节)转换为浮点数

    我希望能够从二进制文件中读取半浮点数并将它们转换为 Swift 中的浮点数 我查看了来自其他语言 例如 Java 和 C 的几种转换 但是我无法获得与半浮点相对应的正确值 如果有人可以帮助我实施 我将不胜感激 从 Float 到 Half
  • 如何使用 swift 在 UITabBarController 中以编程方式添加选项卡?

    如何以编程方式从 UIViewController 扩展的任何类创建选项卡 class DashboardTabBarController UITabBarController override func viewDidLoad here
  • 在 WidgetKit 中每分钟更新时间文本标签

    是否可以在小部件中创建显示当前时间并实时更新的文本标签 尝试创建时钟小部件 但小部件每 5 分钟仅更新 1 次 创建时间表没有帮助 使小部件保持最新 不适用于当前时间 仅适用于计时器等 一个可能的解决方案是使用time日期样式 A styl
  • 快速检查网络速度

    我想从我的 swift 应用程序检查网络速度 我发现很多帖子描述了Reachability特别是查找连接是否可达以及是 WIFI 连接还是 WWAN 连接的方法 我的问题 是否可以检测 WWAN 的类型 2G 3G 4G 你可以用以下命令检
  • 当前图像选择模式会擦除 UI

    我下面有一个非常简单的视图控制器 UI 实际上只是一个带有底部标签栏的按钮 import UIKit class ImageAdderViewController UIViewController override func viewDid
  • Swift 结构类型集

    说我有一个struct 可以是任何东西 struct Cube var x Int var y Int var z Int var width Int 然后我该如何创建一个Set这些点中 是否存在两个具有相同属性的对象 let points
  • 带有自定义 init 的 SwiftUI 视图

    假设我正在制作一个如下所示的自定义输入元素 struct CustomInput View Binding var text String var name String var body some View TextField name
  • Swift 中的 @autoreleasepool 相当于什么?

    在 Swift 中 我注意到没有 autoreleasepool 构造 尽管 Swift 确实使用了 ARC 在 Swift 中管理自动释放池的正确方法是什么 或者它是否因某种原因被删除 语法如下 autoreleasepool code
  • 如何为所有整数类型创建通用整数到十六进制函数?

    我想为所有整数类型创建一个整数到十六进制函数 对于1字节的Int8 它返回两个字母 例如0A 对于2字节的Int16 它返回四个字母 例如0A0B 对于8字节的Int64 它返回16个字母 例如0102030405060708 func h
  • 如何在 Swift 中使用 deltaTime 正确计算 1 秒

    我正在尝试计算经过的秒数deltaTime但我不知道该怎么做 因为我的deltaTime不断打印 0 0166 或 0 0167 这是我的代码 override func update currentTime CFTimeInterval
  • 为什么 MOVE CURSOR 在 OS X Mountain Lion 上不显示?

    我正在做一个项目 想看看 Swing 提供的每个光标是什么样子的 public class Test public static void main String args JFrame frame new JFrame frame set
  • 重新组织链式可观察量

    我有一大块链接的 Rx 可观察量 当通过选择表视图行时会触发这些可观察量table rx modelSelected 我希望能够打破这个逻辑 因为我目前必须在flatMapLatest 因为这是流程的 第一步 感觉不对 我必须在后续执行更多
  • 如何将 SCNPlane 颜色更改为透明颜色

    我正在开发一个 ARKit 项目 在水平面上点击时需要波纹动画效果 为此 我采用了 UIView 对象并将其作为 SCNPlane 对象材料的内容传递 我已将波纹动画添加到 UIView 对象 一切正常 但我无法将 SCNPlane 颜色更
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • 在 Swift 中,如何为具有自动布局的 UIView 制作动画,就像页面滑入一样?

    我尝试创建一个 UIView 来表示一个大小与设备屏幕相同的页面 由于该应用程序支持方向 因此我使用 AutoLayout 来构建它 它工作正常 直到我尝试将页面动画化以从右侧滑入 经过一番研究后 我能想到的最好的办法是 myView UI

随机推荐