无法在Xcode 14的手表应用程序中连接WKExtensionDelegate

7
在苹果开发者文档的章节 "There and Back Again" 中,手表应用程序的App被写成这样:
@main
struct MyWatchApp: App {
    
    @WKExtensionDelegateAdaptor(ExtensionDelegate.self) var extensionDelegate
    
    @SceneBuilder var body: some Scene {
        WindowGroup {
            NavigationView {
                ContentView()
            }
        }
    }
}

很不幸,我在变量声明处收到了一个紫色的运行时警告,上面写着:

@WKExtensionDelegateAdaptor 只能在基于扩展的进程中使用

Xcode 中一定有明确将 App 结构定义为“基于扩展”的内容,但我找不到它!

编辑:更多澄清...... 我正在尝试处理在运行 HealthKit 方法startWatchApp(with:completion:)之后被调用的特殊方法。

表现为手表应用程序的特殊方法是func handle(_ workoutConfiguration: HKWorkoutConfiguration)。我似乎找不到将此函数链接到新的 App 结构的方法。


我希望我能下载他们的示例项目副本,但我无法在任何地方找到它。 - TealShift
2个回答

15

好的,我找到了。解决方法是将WKExtensionDelegate简单替换为新的WKApplicationDelegate


1
您还需要更改“适配器”的名称: @WKApplicationDelegateAdaptor private var extensionDelegate: ExtensionDelegate - RawMean

0

你可以尝试这个解决方案,它简单而通用。

import WatchKit

class ExtensionDelegate: NSObject, WKExtensionDelegate {
    
    static var current: ExtensionDelegate? {
       return (WKExtension.shared().delegate as? ExtensionDelegate)
    }
...
}

然后像下面这样访问当前实例,因为它是单例,所以可以在整个项目范围内访问它。

ExtensionDelegate.current?.dosomething()

抱歉,我觉得你误解了。我并不是在尝试访问一个实例。我只是在尝试符合Xcode 14上的WKExtensionDelegate协议。我已经添加了一些澄清。谢谢! - TealShift

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接