CLKComplicationServer 的 activeComplications 为 nil,尽管显示了并发症

activeComplications of the CLKComplicationServer are nil, although a complication is displayed

我有一个带有复杂功能的手表应用程序。更新表盘上的复杂功能确实有效了很长时间,但最近停止了,可能是由于 watchOS 更新。
原因是 CLKComplicationServer.sharedInstance()activeComplications 属性 是 nil,虽然我的并发症占位符显示在表盘(设备和模拟器)上。

代码再简单不过了:

final class ComplicationController: NSObject, CLKComplicationDataSource {
// …
    func updateComplications() {
//…
        let complicationServer = CLKComplicationServer.sharedInstance()
        if let activeComplications = complicationServer.activeComplications {
            for complication in activeComplications {
                complicationServer.reloadTimeline(for: complication)
            }
        }
//…
  }
//…
}  

如果我在 if let 指令的断点处停止,complicationServer 具有以下值:

下面的 lldb 命令输出 nil:

可能是什么原因?

我的缺点:,但是重构app的时候忘了解决方法
其实我不知道这是解决方案、变通方法还是 hack:

我怀疑如果在代码中的任何地方执行 ComplicationController.sharedCLKComplicationServer 或其 CLKComplicationDataSource,即 ComplicationController 未正确初始化。如果不是,则 ComplicationControllerCLKComplicationServer.

正确初始化

因此,不能调用ComplicationController中的任何函数,例如更新并发症。相反,可以向执行请求的函数的 ComplicationController 发送通知。当然,必须确保 ComplicationController 已经初始化并注册以在发布之前接收这样的通知。
如果是这样,CLKComplicationServer.sharedInstance().activeComplications 就不再是 nil,并且并发症更新有效。