我在使用 WatchOS 时遇到了一个奇怪的问题(但我想这个问题与 iOS 和 OSX 类似)。
我正在使用单例来处理WCSession
委托(完整代码由 NatashaTheRobot 提供,我在这里只粘贴了她的一部分代码,完整代码在这里)。此类具有一个startSession
功能,其中单例关联为会话的委托:
func startSession() {
session?.delegate = self
session?.activateSession()
}
并且所有委托函数都在同一个类中定义,例如session:didReceiveMessage:replyHandler:
我希望能够在 Watch 应用程序每次接收到当前 InterfaceController 独立的消息时调用委托。
我认为实现这个目标的好地方可能是ExtensionDelegate
类:
class ExtensionDelegate: NSObject, WKExtensionDelegate {
let session = WatchSessionManager.sharedManager // THE SINGLETON INSTANCE
func applicationDidFinishLaunching() {
session.startSession()
}
似乎这段代码不起作用,并且从未调用过委托函数。
然后我决定采用一种不太通用的方式,并开始在所有 InterfaceController 中添加对单例实例的引用……但它再次不起作用,并且从未调用过委托方法。然后,在我最后一次尝试中,我直接在 InterfaceController 代码中实现了会话委托协议。在那种情况下,我会收到来自 iOS 应用程序的消息......它工作正常(显然只有当手表应用程序呈现特定的 InterfaceController 时)。
我的问题是:为什么实现一个通用的单例对象不起作用?为什么我必须直接在 InterfaceController 上实现委托才能使其工作?