6

用于后台任务的 WatchOS 代码需要WKExtention.shared().delegate将 设置为self,但现在显示错误消息:

无法分配给属性:“委托”是一个只能获取的属性

如果我删除该行,则在触发后台任务时我不会获得更新,因为我以前能够接收到。

我查看了 StackOverflow 以及 Google 和 Apple 文档,但找不到答案。为什么该行在过去正常工作时现在显示错误。

制作一个新的 WatchKit 应用程序并InterfaceControllerVC.swift 添加WKExtensionDelegate到类中,然后:

    override func awake(withContext context: Any?) {
      super.awake(withContext: context)

      WKExtension.shared().delegate = self
   }

该行:

    WKExtension.shared().delegate = self

标记为红色并显示错误为:

无法分配给属性:“委托”是一个只能获取的属性

4

2 回答 2

11

关于如何使用现代 SwiftUI 应用程序执行此操作的文档并不多,Info.plist 方法似乎不再适用。也许这会帮助其他人更快地解决这个问题:使用WKExtensionDelegateAdaptor,类似于UIApplicationDelegateAdaptor.

@main
struct WatchApp: App  {

@WKExtensionDelegateAdaptor(ExtensionDelegate.self) var extensionDelegate

@SceneBuilder var body: some Scene {
       
...

}
于 2020-10-30T09:00:27.203 回答
3

代表由系统自动分配,如此处所述。

Apple Doc WKExtensionDelegate

通过执行以下操作设置您的委托对象:

  1. 创建一个名为Your_Class_ExtensionDelegate的类并实现协议WKExtensionDelegate
  2. 确保WatchKit Extension 中 inWKExtensionDelegateClassName的值为(Swift 项目需要模块名称。)Info.plist$(PRODUCT_MODULE_NAME).Your_Class_ExtensionDelegate
于 2019-07-31T13:01:33.010 回答